Browse Source

HPCC-12117 Clean up access to the default timer

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 10 years ago
parent
commit
3115760b6d

+ 4 - 4
ecl/eclagent/eclagent.cpp

@@ -1847,7 +1847,7 @@ void EclAgent::doProcess()
                 w->resetWorkflow();
         }
         {
-            MTIME_SECTION(timer, "Process");
+            MTIME_SECTION(queryActiveTimer(), "Process");
             Owned<IEclProcess> process = loadProcess();
 
             if (checkVersion && (process->getActivityVersion() != eclccCodeVersion))
@@ -3005,7 +3005,7 @@ char * EclAgent::getDaliServers()
 void EclAgent::addTimings()
 {
     WorkunitUpdate w = updateWorkUnit();
-    updateWorkunitTimings(w, timer, "eclagent");
+    updateWorkunitTimings(w, queryActiveTimer(), "eclagent");
 }
 
 // eclagent abort monitoring
@@ -3315,7 +3315,7 @@ extern int HTHOR_API eclagent_main(int argc, const char *argv[], StringBuffer *
         if (daliServers.length())
         {
             {
-                MTIME_SECTION(timer, "SDS_Initialize");
+                MTIME_SECTION(queryActiveTimer(), "SDS_Initialize");
                 Owned<IGroup> serverGroup = createIGroup(daliServers.str(), DALI_SERVER_PORT);
                 initClientProcess(serverGroup, DCR_EclAgent, 0, NULL, NULL, MP_WAIT_FOREVER);
             }
@@ -3326,7 +3326,7 @@ extern int HTHOR_API eclagent_main(int argc, const char *argv[], StringBuffer *
 #endif
 
             {
-                MTIME_SECTION(timer, "Environment_Initialize");
+                MTIME_SECTION(queryActiveTimer(), "Environment_Initialize");
                 setPasswordsFromSDS();
             }
             PrintLog("ECLAGENT build %s", BUILD_TAG);

+ 1 - 1
ecl/eclcc/eclcc.cpp

@@ -1667,7 +1667,7 @@ bool EclCC::processFiles()
     if (logTimings)
     {
         StringBuffer s;
-        fprintf(stderr, "%s", defaultTimer->getTimings(s).str());
+        fprintf(stderr, "%s", queryActiveTimer()->getTimings(s).str());
     }
     return ok;
 }

+ 2 - 2
ecl/hqlcpp/hqlecl.cpp

@@ -369,7 +369,7 @@ bool HqlDllGenerator::generateCode(HqlQueryContext & query)
         // ensure warnings/errors are available before we do the processing...
         wu->commit();
 
-        MTIME_SECTION (timer, "Generate_code");
+        MTIME_SECTION (queryActiveTimer(), "Generate_code");
         unsigned time = msTick();
         HqlCppTranslator translator(errs, wuname, code, targetClusterType, ctxCallback);
         processMetaCommands(translator, wu, query, ctxCallback);
@@ -539,7 +539,7 @@ bool HqlDllGenerator::doCompile(ICppCompiler * compiler)
     if (okToAbort)
         compiler->setAbortChecker(this);
 
-    MTIME_SECTION (timer, "Compile_code");
+    MTIME_SECTION (queryActiveTimer(), "Compile_code");
     unsigned time = msTick();
     PrintLog("Compiling %s", wuname);
     bool ok = compiler->compile();

+ 1 - 1
ecl/hthor/hthorkey.cpp

@@ -1934,7 +1934,7 @@ protected:
         offset_t partsize = part->queryAttributes().getPropInt64("@size", -1);
         if (partsize==-1)
         {
-            MTIME_SECTION(timer, "Fetch remote file size");
+            MTIME_SECTION(queryActiveTimer(), "Fetch remote file size");
             unsigned numCopies = part->numCopies();
             for (unsigned copy=0; copy < numCopies; copy++)
             {

+ 6 - 6
ecl/wutest/wutest.cpp

@@ -89,11 +89,11 @@ bool dump(IConstWorkUnit &w, IProperties *globals)
         Owned<IWorkUnitFactory> factory = getWorkUnitFactory();
         SCMStringBuffer wuid, jobname;
         {
-            MTIME_SECTION(timer, "getWUID");
+            MTIME_SECTION(queryActiveTimer(), "getWUID");
             w.getWuid(wuid);
         }
         {
-            MTIME_SECTION(timer, "deleteWorkunit");
+            MTIME_SECTION(queryActiveTimer(), "deleteWorkunit");
             factory->deleteWorkUnit(wuid.str());
         }
         printf("deleted %s\n", wuid.str());
@@ -362,11 +362,11 @@ int main(int argc, const char *argv[])
     closeDllServer();   
     closeEnvironment(); 
     closedownClientProcess();   // dali client closedown
-    if (timer)
+    if (queryActiveTimer())
     {
-        timer->printTimings();
-        timer->reset();
-        timer = NULL;
+        queryActiveTimer()->printTimings();
+        queryActiveTimer()->reset();
+        setActiveTimer(NULL);
     }
     releaseAtoms();
     return 0;

+ 1 - 1
roxie/ccd/ccd.hpp

@@ -959,7 +959,7 @@ public:
     void reset()
     {
         stats.reset();
-        timer->reset();
+        queryActiveTimer()->reset();
     }
 };
 

+ 11 - 11
roxie/ccd/ccdactivities.cpp

@@ -946,7 +946,7 @@ public:
 
     virtual bool process()
     {
-        MTIME_SECTION(timer, "CRoxieDiskReadBaseActivity::process");
+        MTIME_SECTION(queryActiveTimer(), "CRoxieDiskReadBaseActivity::process");
         atomic_inc(&diskReadStarted);
         Owned<IMessagePacker> output = ROQ->createOutputStream(packet->queryHeader(), false, logctx);
         doProcess(output);
@@ -2328,7 +2328,7 @@ public:
         }
         else
         {
-            MTIME_SECTION(timer, "CParallelRoxieActivity::process");
+            MTIME_SECTION(queryActiveTimer(), "CParallelRoxieActivity::process");
             atomic_inc(&diskReadStarted);
             Owned<IMessagePacker> output = ROQ->createOutputStream(packet->queryHeader(), false, logctx);
             class casyncfor: public CAsyncFor
@@ -3457,7 +3457,7 @@ public:
 
     virtual bool process()
     {
-        MTIME_SECTION(timer, "CRoxieIndexReadActivity ::process");
+        MTIME_SECTION(queryActiveTimer(), "CRoxieIndexReadActivity ::process");
         unsigned __int64 keyedLimit = readHelper->getKeyedLimit();
         unsigned __int64 limit = readHelper->getRowLimit();
 
@@ -3736,7 +3736,7 @@ public:
 
     virtual bool process()
     {
-        MTIME_SECTION(timer, "CRoxieIndexNormalizeActivity ::process");
+        MTIME_SECTION(queryActiveTimer(), "CRoxieIndexNormalizeActivity ::process");
         unsigned __int64 keyedLimit = normalizeHelper->getKeyedLimit(); 
         unsigned __int64 rowLimit = normalizeHelper->getRowLimit();
 
@@ -3910,7 +3910,7 @@ public:
 
     virtual bool process()
     {
-        MTIME_SECTION(timer, "CRoxieIndexCountActivity ::process");
+        MTIME_SECTION(queryActiveTimer(), "CRoxieIndexCountActivity ::process");
         Owned<IMessagePacker> output = ROQ->createOutputStream(packet->queryHeader(), false, logctx);
         unsigned skipped = 0;
 
@@ -4034,7 +4034,7 @@ public:
 
     virtual bool process()
     {
-        MTIME_SECTION(timer, "CRoxieIndexAggregateActivity ::process");
+        MTIME_SECTION(queryActiveTimer(), "CRoxieIndexAggregateActivity ::process");
         Owned<IMessagePacker> output = ROQ->createOutputStream(packet->queryHeader(), false, logctx);
 
         OptimizedRowBuilder rowBuilder(rowAllocator, meta, output, serializer);
@@ -4183,7 +4183,7 @@ public:
 
     virtual bool process()
     {
-        MTIME_SECTION(timer, "CRoxieIndexGroupAggregateActivity ::process");
+        MTIME_SECTION(queryActiveTimer(), "CRoxieIndexGroupAggregateActivity ::process");
         Owned<IRowManager> rowManager = roxiemem::createRowManager(0, NULL, logctx, NULL, true); // MORE - should not really use default limits
         Owned<IMessagePacker> output = ROQ->createOutputStream(packet->queryHeader(), false, logctx);
 
@@ -4387,7 +4387,7 @@ public:
 
 bool CRoxieFetchActivityBase::process()
 {
-    MTIME_SECTION(timer, "CRoxieFetchActivityBase::process");
+    MTIME_SECTION(queryActiveTimer(), "CRoxieFetchActivityBase::process");
     Owned<IMessagePacker> output = ROQ->createOutputStream(packet->queryHeader(), false, logctx);
     unsigned accepted = 0;
     unsigned rejected = 0;
@@ -4797,7 +4797,7 @@ IRoxieSlaveActivity *CRoxieKeyedJoinIndexActivityFactory::createActivity(SlaveCo
 
 bool CRoxieKeyedJoinIndexActivity::process()
 {
-    MTIME_SECTION(timer, "CRoxieKeyedJoinIndexActivity::process");
+    MTIME_SECTION(queryActiveTimer(), "CRoxieKeyedJoinIndexActivity::process");
     Owned<IMessagePacker> output = ROQ->createOutputStream(packet->queryHeader(), false, logctx);
     IOutputMetaData *joinFieldsMeta = helper->queryJoinFieldsRecordSize();
     Owned<IEngineRowAllocator> joinFieldsAllocator = getRowAllocator(joinFieldsMeta, basefactory->queryId());
@@ -5088,7 +5088,7 @@ public:
 
 bool CRoxieKeyedJoinFetchActivity::process()
 {
-    MTIME_SECTION(timer, "CRoxieKeyedJoinFetchActivity::process");
+    MTIME_SECTION(queryActiveTimer(), "CRoxieKeyedJoinFetchActivity::process");
     // MORE - where we are returning everything there is an optimization or two to be had
     Owned<IMessagePacker> output = ROQ->createOutputStream(packet->queryHeader(), false, logctx);
     unsigned processed = 0;
@@ -5228,7 +5228,7 @@ public:
 
     virtual bool process()
     {
-        MTIME_SECTION(timer, "CRoxieRemoteActivity ::process");
+        MTIME_SECTION(queryActiveTimer(), "CRoxieRemoteActivity ::process");
 
         Owned<IMessagePacker> output = ROQ->createOutputStream(packet->queryHeader(), false, logctx);
         unsigned __int64 rowLimit = remoteHelper->getRowLimit();

+ 5 - 5
roxie/ccd/ccdqueue.cpp

@@ -1633,7 +1633,7 @@ public:
                 unsigned length = packet->queryHeader().packetlength;
 
                 {
-                    MTIME_SECTION(timer, "bucket_wait");
+                    MTIME_SECTION(queryActiveTimer(), "bucket_wait");
                     bucket.wait((length / 1024) + 1);
                 }
                 if (channelWrite(header.channel, &header, length) != length)
@@ -1769,7 +1769,7 @@ public:
             throttledPacketSendManager->sendPacket(x, logctx);
         else
         {
-            MTIME_SECTION(timer, "RoxieSocketQueueManager::sendPacket");
+            MTIME_SECTION(queryActiveTimer(), "RoxieSocketQueueManager::sendPacket");
             RoxiePacketHeader &header = x->queryHeader();
 
 
@@ -1805,7 +1805,7 @@ public:
 
     virtual void sendIbyti(RoxiePacketHeader &header, const IRoxieContextLogger &logctx)
     {
-        MTIME_SECTION(timer, "RoxieSocketQueueManager::sendIbyti");
+        MTIME_SECTION(queryActiveTimer(), "RoxieSocketQueueManager::sendIbyti");
         RoxiePacketHeader ibytiHeader(header, header.activityId & ROXIE_PRIORITY_MASK);
     
         if (logctx.queryTraceLevel() > 8)
@@ -1822,7 +1822,7 @@ public:
 
     virtual void sendAbort(RoxiePacketHeader &header, const IRoxieContextLogger &logctx)
     {
-        MTIME_SECTION(timer, "RoxieSocketQueueManager::sendAbort");
+        MTIME_SECTION(queryActiveTimer(), "RoxieSocketQueueManager::sendAbort");
         RoxiePacketHeader abortHeader(header, header.activityId & ROXIE_PRIORITY_MASK);
         abortHeader.retries = QUERY_ABORTED;
         if (logctx.queryTraceLevel() > 8)
@@ -1838,7 +1838,7 @@ public:
 
     virtual void sendAbortCallback(const RoxiePacketHeader &header, const char *lfn, const IRoxieContextLogger &logctx) 
     {
-        MTIME_SECTION(timer, "RoxieSocketQueueManager::sendAbortCallback");
+        MTIME_SECTION(queryActiveTimer(), "RoxieSocketQueueManager::sendAbortCallback");
         RoxiePacketHeader abortHeader(header, ROXIE_FILECALLBACK);
         abortHeader.retries = QUERY_ABORTED;
         MemoryBuffer data;

+ 1 - 1
roxie/ccd/ccdserver.cpp

@@ -26481,7 +26481,7 @@ protected:
         stateInfo.setown(createPTreeFromXMLString("<test memoryLimit='50000000'/>"));
         queryFactory.setown(createServerQueryFactory("test", queryDll.getLink(), *package, stateInfo, false, false));
         ctx.setown(createSlaveContext(queryFactory, logctx, NULL));
-        timer->reset();
+        queryActiveTimer()->reset();
     }
 
     void testActivity(IRoxieServerActivity *activity, char const * const *input, char const * const *output)

+ 2 - 2
roxie/ccd/ccdstate.cpp

@@ -2636,11 +2636,11 @@ private:
             else if (stricmp(queryName, "control:timings")==0)
             {
                 reply.append("<Timings>");
-                timer->getTimings(reply);
+                queryActiveTimer()->getTimings(reply);
                 reply.append("</Timings>");
                 if (control->getPropBool("@reset", false))
                 {
-                    timer->reset();
+                    queryActiveTimer()->reset();
                 }
             }
             else if (stricmp(queryName, "control:topology")==0)

+ 1 - 1
roxie/udplib/udptrs.cpp

@@ -221,7 +221,7 @@ public:
             unsigned length = header->length;
             if (bucket)
             {
-                MTIME_SECTION(timer, "bucket_wait");
+                MTIME_SECTION(queryActiveTimer(), "bucket_wait");
                 bucket->wait((length / 1024)+1);
             }
             try

+ 5 - 5
system/jhtree/ctfile.cpp

@@ -601,7 +601,7 @@ void CJHTreeNode::unpack(const void *node, bool needCopy)
     else if (isLeaf() && (keyType & HTREE_COMPRESSED_KEY))
     {
         {
-            MTIME_SECTION(timer, "Compressed node expand");
+            MTIME_SECTION(queryActiveTimer(), "Compressed node expand");
             expandedSize = keyHdr->getNodeSize();
             bool quick = (keyType&HTREE_QUICK_COMPRESSED_KEY)==HTREE_QUICK_COMPRESSED_KEY;
 #ifndef _OLD_VERSION
@@ -621,7 +621,7 @@ void CJHTreeNode::unpack(const void *node, bool needCopy)
         int i;
         if (keyType & COL_PREFIX)
         {
-            MTIME_SECTION(timer, "COL_PREFIX expand");
+            MTIME_SECTION(queryActiveTimer(), "COL_PREFIX expand");
             
             if (hdr.numKeys) {
                 bool handleVariable = isVariable && isLeaf();
@@ -718,7 +718,7 @@ void CJHTreeNode::unpack(const void *node, bool needCopy)
         }
         else
         {
-            MTIME_SECTION(timer, "NO compression copy");
+            MTIME_SECTION(queryActiveTimer(), "NO compression copy");
             expandedSize = hdr.keyBytes + sizeof( __int64 );  // MORE - why is the +sizeof() there?
             keyBuf = (char *) allocMem(expandedSize);
             memcpy(keyBuf, keys, hdr.keyBytes + sizeof( __int64 ));
@@ -860,12 +860,12 @@ extern jhtree_decl void validateKeyFile(const char *filename, offset_t nodePos)
         MemoryAttr ma;
         char *buffer = (char *) ma.allocate(hdr.nodeSize);
         {
-            MTIME_SECTION(timer, "JHTREE read index node");
+            MTIME_SECTION(queryActiveTimer(), "JHTREE read index node");
             io->read(nodeOffset, hdr.nodeSize, buffer);
         }
         CJHTreeNode theNode;
         {
-            MTIME_SECTION(timer, "JHTREE load index node");
+            MTIME_SECTION(queryActiveTimer(), "JHTREE load index node");
             theNode.load(&keyHdr, buffer, nodeOffset, true);
         }
         NodeHdr *nodeHdr = (NodeHdr *) buffer;

+ 4 - 4
system/jhtree/jhtree.cpp

@@ -1139,7 +1139,7 @@ IKeyIndex *CKeyStore::doload(const char *fileName, unsigned crc, IReplicatedFile
 {
     // isTLK provided by caller since flags in key header unreliable. If either say it's a TLK, I believe it.
     {
-        MTIME_SECTION(timer, "CKeyStore_load");
+        MTIME_SECTION(queryActiveTimer(), "CKeyStore_load");
         IKeyIndex *keyIndex;
 
         // MORE - holds onto the mutex way too long
@@ -1387,7 +1387,7 @@ CJHTreeNode *CMemKeyIndex::loadNode(offset_t pos)
         throw E;
     }
     char *nodeData = (char *) (io->base() + pos);
-    MTIME_SECTION(timer, "JHTREE read node");
+    MTIME_SECTION(queryActiveTimer(), "JHTREE read node");
     return CKeyIndex::loadNode(nodeData, pos, false);
 }
 
@@ -1407,7 +1407,7 @@ CJHTreeNode *CDiskKeyIndex::loadNode(offset_t pos)
     unsigned nodeSize = keyHdr->getNodeSize();
     MemoryAttr ma;
     char *nodeData = (char *) ma.allocate(nodeSize);
-    MTIME_SECTION(timer, "JHTREE read node");
+    MTIME_SECTION(queryActiveTimer(), "JHTREE read node");
     if (io->read(pos, nodeSize, nodeData) != nodeSize)
     {
         IException *E = MakeStringException(errno, "Error %d reading node at position %"I64F"x", errno, pos); 
@@ -1446,7 +1446,7 @@ CJHTreeNode *CKeyIndex::loadNode(char *nodeData, offset_t pos, bool needsCopy)
             throwUnexpected();
         }
         {
-            MTIME_SECTION(timer, "JHTREE load node");
+            MTIME_SECTION(queryActiveTimer(), "JHTREE load node");
             ret->load(keyHdr, nodeData, pos, true);
         }
         return ret.getClear();

+ 3 - 2
system/jlib/jbroadcast.cpp

@@ -840,7 +840,7 @@ public:
         unsigned offset = 0;
 
 #ifdef _DEBUG
-        MTimeSection * mt = new MTimeSection(defaultTimer, "ServerBroadcast", "SERVER BROADCAST"); // MORE is ServerBroadcast a scope (where) or a name (what)?
+        MTimeSection * mt = new MTimeSection(queryActiveTimer(), "ServerBroadcast", "SERVER BROADCAST"); // MORE is ServerBroadcast a scope (where) or a name (what)?
 #endif
 
         unsigned maxDataSz = MC_PACKET_SIZE-sizeof(MCPacketHeader);
@@ -1067,7 +1067,8 @@ public:
         LOG(MCdebugProgress(10), unknownJob, "All %d packets from all %d nodes acknowledged", packets, nodes);
 #ifdef _DEBUG
         StringBuffer str;
-        defaultTimer->getTimings(str);
+        if (queryActiveTimer())
+            queryActiveTimer()->getTimings(str);
         LOG(MCdebugProgress(10), unknownJob, "%s", str.str());
 #endif
         return !stopped;

+ 15 - 5
system/jlib/jdebug.cpp

@@ -608,8 +608,19 @@ public:
     }
 };
 
-ITimeReporter *defaultTimer;
-ITimeReporter *timer;
+static ITimeReporter * activeTimer = NULL;
+ITimeReporter * queryActiveTimer()
+{
+    return activeTimer;
+}
+void setActiveTimer(ITimeReporter * reporter)
+{
+    ::Release(activeTimer);
+    ::Link(reporter);
+    activeTimer = reporter;
+}
+
+
 ITimeReporter *createStdTimeReporter() { return new DefaultTimeReporter(); }
 ITimeReporter *createStdTimeReporter(MemoryBuffer &mb) { return new DefaultTimeReporter(mb); }
 
@@ -624,14 +635,13 @@ MODULE_INIT(INIT_PRIORITY_JDEBUG1)
 
 MODULE_INIT(INIT_PRIORITY_JDEBUG2)
 {
-    timer = defaultTimer = new DefaultTimeReporter();
+    activeTimer = new DefaultTimeReporter();
     return true;
 }
 
 MODULE_EXIT()
 {
-    ::Release(defaultTimer);
-    defaultTimer = NULL;
+    setActiveTimer(NULL);
 }
 
 

+ 2 - 2
system/jlib/jdebug.hpp

@@ -156,8 +156,8 @@ protected:
 
 
 #if defined(TIMING)
-extern jlib_decl ITimeReporter *defaultTimer; // MORE - this appears to be always exactly the same as timer. Should delete one or other of them?
-extern jlib_decl ITimeReporter *timer;
+extern jlib_decl ITimeReporter * queryActiveTimer();
+extern jlib_decl void setActiveTimer(ITimeReporter * reporter);
 extern jlib_decl ITimeReporter *createStdTimeReporter();
 extern jlib_decl ITimeReporter *createStdTimeReporter(MemoryBuffer &mb);
 #define TIME_SECTION(title)   TimeSection   glue(_timer,__LINE__)(title);