Преглед изворни кода

HPCC-17210 Do not rollover tank files if there is unfinished job

1. LogThread should set startTime when created.
2. LogThread should not add a job to Ack tank file if the
job failed.
3. LogThread should rename tank files only when all of jobs
are finished.

Signed-off-by: wangkx <kevin.wang@lexisnexis.com>
wangkx пре 8 година
родитељ
комит
d1cf1c5bb1
2 измењених фајлова са 6 додато и 4 уклоњено
  1. 2 0
      esp/logging/logginglib/LogFailSafe.hpp
  2. 4 4
      esp/logging/logginglib/logthread.cpp

+ 2 - 0
esp/logging/logginglib/LogFailSafe.hpp

@@ -40,6 +40,7 @@ interface ILogFailSafe : IInterface
 
     virtual void RolloverAllLogs()=0;//
     virtual bool PopPendingLogRecord(StringBuffer& GUID, StringBuffer& cache) = 0;//
+    virtual bool canRollCurrentLog() = 0;
 };
 
 extern LOGGINGCOMMON_API ILogFailSafe* createFailSafeLogger(const char* logType="", const char* logsdir="./logs");
@@ -87,6 +88,7 @@ public:
 
     virtual void RolloverAllLogs();//
     virtual bool PopPendingLogRecord(StringBuffer& GUID, StringBuffer& cache);//
+    virtual bool canRollCurrentLog() { return m_Added.getItemCount() == m_Cleared.getItemCount(); };
 };
 
 #endif // !_LOGFAILSAFE_HPP__

+ 4 - 4
esp/logging/logginglib/logthread.cpp

@@ -92,6 +92,9 @@ CLogThread::CLogThread(IPropertyTree* _cfg , const char* _service, const char* _
 
         logFailSafe.setown(createFailSafeLogger(_service, _agentName, logsDir));
     }
+    time_t tNow;
+    time(&tNow);
+    localtime_r(&tNow, &m_startTime);
 }
 
 CLogThread::~CLogThread()
@@ -113,7 +116,6 @@ int CLogThread::run()
     while(!stopping)
     {
         m_sem.wait(UPDATELOGTHREADWAITINGTIME);
-
         sendLog();
         if(logFailSafe.get())
         {
@@ -130,7 +132,7 @@ void CLogThread::stop()
     try
     {
         CriticalBlock b(logQueueCrit);
-        if (!logQueue.ordinality() && logFailSafe.get())
+        if (!logQueue.ordinality() && logFailSafe.get() && logFailSafe->canRollCurrentLog())
             logFailSafe->RollCurrentLog();
         //If logQueue is not empty, the log files are rolled over so that queued jobs can be read
         //when the CLogThread is restarted.
@@ -245,8 +247,6 @@ void CLogThread::sendLog()
                 }
                 if (!willRetry)
                 {
-                    if(ensureFailSafe && logFailSafe.get())
-                        logFailSafe->AddACK(GUID);
                     logRequest->Release();
                 }
                 ERRLOG("%s", errorMessage.str());