diff --git a/fdbserver/worker.actor.cpp b/fdbserver/worker.actor.cpp index 2cc6a43abb..edcead498c 100644 --- a/fdbserver/worker.actor.cpp +++ b/fdbserver/worker.actor.cpp @@ -770,7 +770,7 @@ ACTOR Future monitorTraceLogIssues(Optional _issues = getTraceLogIssues(); if (pingTimeout) { // Ping trace log writer thread timeout. - _issues.insert("trace_log_writer_thread_likely_died"); + _issues.insert("trace_log_writer_thread_unresponsive"); pingTimeout = false; } if (_issues.size() > 0) { diff --git a/flow/Trace.cpp b/flow/Trace.cpp index 6eace47570..ade6e4d7ca 100644 --- a/flow/Trace.cpp +++ b/flow/Trace.cpp @@ -221,14 +221,19 @@ public: }; struct IssuesList : ITraceLogIssuesReporter, ThreadSafeReferenceCounted { - IssuesList(){}; - void addIssue(std::string& issue) override { + IssuesList() : moved(false){}; + void addIssue(std::string issue) override { MutexHolder h(mutex); + if (moved) { + issues = std::set(); + moved = false; + } issues.insert(issue); } std::set getAndFlushIssues() override { MutexHolder h(mutex); + moved = true; return std::move(issues); } @@ -237,6 +242,7 @@ public: private: Mutex mutex; + bool moved; std::set issues; }; @@ -312,7 +318,9 @@ public: void action(Ping& a) { ((ThreadSingleAssignmentVar*)a.p.getPtr())->send(Void()); } }; - TraceLog() : bufferLength(0), loggedLength(0), opened(false), preopenOverflowCount(0), barriers(new BarrierList), logTraceEventMetrics(false), formatter(new XmlTraceLogFormatter()) {} + TraceLog() + : bufferLength(0), loggedLength(0), opened(false), preopenOverflowCount(0), barriers(new BarrierList), + logTraceEventMetrics(false), formatter(new XmlTraceLogFormatter()), issues(new IssuesList) {} bool isOpen() const { return opened; } @@ -769,11 +777,10 @@ TraceEvent& TraceEvent::operator=(TraceEvent &&ev) { uint64_t getUnsuccessfulFlushCount() { return g_traceLog.getUnsuccessfulFlushCount(); } -std::set getTraceLogIssues() { -======= + std::set getTraceLogIssues() { ->>>>>>> Changed issue reporting to be thread safe. Also changed the liveness ping to be thread safe. return std::move(g_traceLog.getTraceLogIssues()); + return g_traceLog.getTraceLogIssues(); } void pingTraceLogWriterThread(ThreadFuture& p) {