Selaa lähdekoodia

Merge pull request #8890 from richardkchapman/totalThorSort

HPCC-14614 Sorting by total thor time isn't working

Reviewed-by: Gavin Halliday <ghalliday@hpccsystems.com>
Gavin Halliday 9 vuotta sitten
vanhempi
commit
79368ada35
2 muutettua tiedostoa jossa 26 lisäystä ja 2 poistoa
  1. 3 1
      common/workunit/workunit.cpp
  2. 23 1
      tools/wutool/wutool.cpp

+ 3 - 1
common/workunit/workunit.cpp

@@ -2907,7 +2907,7 @@ public:
                 {
                     unknownAttributes.append(getEnumText(subfmt,workunitSortFields));
                     if (subfmt==WUSFtotalthortime)
-                        sortorder = (WUSortField) (sortorder | WUSFnumeric);
+                        sortorder = (WUSortField) (sortorder & ~WUSFnumeric);
                 }
                 else
                 {
@@ -2921,6 +2921,8 @@ public:
                 fv = fv + strlen(fv)+1;
             }
         }
+        if ((sortorder&0xff)==WUSFtotalthortime)
+            sortorder = (WUSortField) (sortorder & ~WUSFnumeric);
         query.insert(0, namefilter.get());
         if (sortorder)
         {

+ 23 - 1
tools/wutool/wutool.cpp

@@ -486,7 +486,8 @@ class WuTool : public CppUnit::TestFixture
         CPPUNIT_TEST(testQuery);
         CPPUNIT_TEST(testGraph);
         CPPUNIT_TEST(testGraphProgress);
-        CPPUNIT_TEST(testGlobal);
+        CPPUNIT_TEST(testGlobal); 
+        CPPUNIT_TEST(testSortByThorTime);
     CPPUNIT_TEST_SUITE_END();
 protected:
     static StringArray wuids;
@@ -1646,6 +1647,27 @@ protected:
         ASSERT(numIterated == (testSize+9)/10);
         numIterated++;
     }
+    void testSortByThorTime()
+    {
+        Owned<IWorkUnitFactory> factory = getWorkUnitFactory();
+        unsigned start = msTick();
+        unsigned numIterated = 0;
+        // Test filter by filesRead
+        WUSortField nofilter[] = { WUSFterm };
+        unsigned prevValue = 0;
+        Owned<IConstWorkUnitIterator> wus = factory->getWorkUnitsSorted((WUSortField)(WUSFtotalthortime+WUSFnumeric), nofilter, nullptr, 0, 10000, NULL, NULL);
+        ForEach(*wus)
+        {
+            IConstWorkUnitInfo &wu = wus->query();
+            if (numIterated)
+                ASSERT(wu.getTotalThorTime() >= prevValue);
+            prevValue=wu.getTotalThorTime();
+            numIterated++;
+        }
+        DBGLOG("%d workunits by totalThorTime in %d ms", numIterated, msTick()-start);
+        ASSERT(numIterated == (testSize+9)/10);
+        numIterated++;
+    }
     void testGlobal()
     {
         // Is global workunit ever actually used any more? For scalar persists, perhaps