Przeglądaj źródła

HPCC-26731 Avoid assert when merging stats between collections

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 3 lat temu
rodzic
commit
f7c55d7598
2 zmienionych plików z 10 dodań i 1 usunięć
  1. 3 1
      system/jlib/jstats.cpp
  2. 7 0
      system/jlib/jstats.h

+ 3 - 1
system/jlib/jstats.cpp

@@ -2307,7 +2307,9 @@ void CRuntimeStatisticCollection::updateDelta(CRuntimeStatisticCollection & targ
 
 void CRuntimeStatisticCollection::mergeStatistic(StatisticKind kind, unsigned __int64 value)
 {
-    queryStatistic(kind).merge(value, queryMergeMode(kind));
+    CRuntimeStatistic * target = queryOptStatistic(kind);
+    if (target)
+        target->merge(value, queryMergeMode(kind));
 }
 
 void CRuntimeStatisticCollection::sumStatistic(StatisticKind kind, unsigned __int64 value)

+ 7 - 0
system/jlib/jstats.h

@@ -551,6 +551,13 @@ public:
 #endif
         return values[index];
     }
+    inline CRuntimeStatistic * queryOptStatistic(StatisticKind kind)
+    {
+        unsigned index = queryMapping().getIndex(kind);
+        if (index == mapping.numStatistics())
+            return nullptr;
+        return &values[index];
+    }
     inline const CRuntimeStatistic & queryStatistic(StatisticKind kind) const
     {
         unsigned index = queryMapping().getIndex(kind);