Преглед на файлове

HPCC-17648 Fix CSingleKeySegmentMonitorBase serialization

And add SegMonitorList serialization/deserializtion methods.

Signed-off-by: Jake Smith <jake.smith@lexisnexisrisk.com>
Jake Smith преди 8 години
родител
ревизия
211c7381e7
променени са 3 файла, в които са добавени 25 реда и са изтрити 2 реда
  1. 2 2
      rtl/eclrtl/rtlkey.cpp
  2. 20 0
      system/jhtree/jhtree.cpp
  3. 3 0
      system/jhtree/jhtree.hpp

+ 2 - 2
rtl/eclrtl/rtlkey.cpp

@@ -533,9 +533,9 @@ public:
     virtual IKeySegmentMonitor *combine(const IKeySegmentMonitor *with) const { throwUnexpected(); };
     virtual bool isSimple() const { return true; }
 
-    virtual MemoryBuffer &serialize(MemoryBuffer &mb)
+    virtual MemoryBuffer &serialize(MemoryBuffer &mb) const override
     {
-        return CKeySegmentMonitor::serialize(mb);
+        CKeySegmentMonitor::serialize(mb);
         if (val) 
             mb.append((bool)true).append(size,val);
         else

+ 20 - 0
system/jhtree/jhtree.cpp

@@ -260,6 +260,21 @@ void SegMonitorList::recalculateCache()
     cachedLRS = _lastRealSeg();
 }
 
+void SegMonitorList::deserialize(MemoryBuffer &mb)
+{
+    unsigned num;
+    mb.read(num);
+    while (num--)
+        append(deserializeKeySegmentMonitor(mb));
+}
+
+void SegMonitorList::serialize(MemoryBuffer &mb) const
+{
+    mb.append((unsigned) ordinality());
+    ForEachItemIn(idx, segMonitors)
+        segMonitors.item(idx).serialize(mb);
+}
+
 // interface IIndexReadContext
 void SegMonitorList::append(IKeySegmentMonitor *segment)
 {
@@ -935,6 +950,11 @@ public:
         activitySegs->setMergeBarrier(offset); 
     }
 
+    virtual void deserializeSegmentMonitors(MemoryBuffer &mb) override
+    {
+        segs.deserialize(mb);
+    }
+
     virtual void finishSegmentMonitors()
     {
         if(transformSegs)

+ 3 - 0
system/jhtree/jhtree.hpp

@@ -178,6 +178,8 @@ public:
     void checkSize(size32_t keyedSize, char const * keyname);
     void recalculateCache();
     void finish();
+    void deserialize(MemoryBuffer &mb);
+    void serialize(MemoryBuffer &mb) const;
 
     // interface IIndexReadContext
     virtual void append(IKeySegmentMonitor *segment);
@@ -213,6 +215,7 @@ interface IKeyManager : public IInterface, extends IIndexReadContext
     virtual void resetCounts() = 0;
 
     virtual void setLayoutTranslator(IRecordLayoutTranslator * trans) = 0;
+    virtual void deserializeSegmentMonitors(MemoryBuffer &mb) = 0;
     virtual void finishSegmentMonitors() = 0;
 
     virtual bool lookupSkip(const void *seek, size32_t seekGEOffset, size32_t seeklen) = 0;