]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common: reset last_log_sent when clog_to_monitors is updated 39912/head
authorGerald Yang <gerald.yang@canonical.com>
Wed, 3 Mar 2021 04:37:15 +0000 (04:37 +0000)
committerGerald Yang <gerald.yang@canonical.com>
Tue, 6 Apr 2021 04:28:12 +0000 (04:28 +0000)
When clog_to_monitors is disabled, "last_log" still keeps increasing by
get_next_seq() if OSD writes info to clog

But "last_log_sent" doesn't increase, if we disable clog_to_monitors for
a bit longer and then re-enabling it, the num_unsent could be bigger than
log_queue_size(), it will trigger an assertion in _get_mon_log_message

We need to reset last_log_sent to last_log before updating clog_to_monitors

Signed-off-by: Gerald Yang <gerald.yang@canonical.com>
(cherry picked from commit 294ddf9ba779d40b0bc859e55f5287379c75624f)

Conflicts:
src/common/LogClient.cc

src/common/LogClient.cc
src/common/LogClient.h

index f4ac40ee4656aea19f3eb4463a5cab229f54d366..17e20094fe12191a01f137d4fae917b3b2695f69 100644 (file)
@@ -147,7 +147,10 @@ LogClientTemp::~LogClientTemp()
 
 void LogChannel::set_log_to_monitors(bool v)
 {
-  log_to_monitors = v;
+  if (log_to_monitors != v) {
+    parent->reset();
+    log_to_monitors = v;
+  }
 }
 
 void LogChannel::update_config(map<string,string> &log_to_monitors,
@@ -347,6 +350,15 @@ version_t LogClient::queue(LogEntry &entry)
   return entry.seq;
 }
 
+void LogClient::reset()
+{
+  std::lock_guard l(log_lock);
+  if (log_queue.size()) {
+    log_queue.clear();
+  }
+  last_log_sent = last_log;
+}
+
 uint64_t LogClient::get_next_seq()
 {
   std::lock_guard l(log_lock);
index ab3852cae212cf545d09fa6a8c69edc71de35559..e633620e1936005b0523d78cfb02b3e5fe1025e9 100644 (file)
@@ -251,6 +251,7 @@ public:
   const EntityName& get_myname();
   entity_name_t get_myrank();
   version_t queue(LogEntry &entry);
+  void reset();
 
 private:
   Message *_get_mon_log_message();