]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: do not return old failure report when updating it
authorKefu Chai <kchai@redhat.com>
Thu, 11 Mar 2021 09:47:50 +0000 (17:47 +0800)
committersinguliere <singuliere@autistici.org>
Thu, 1 Apr 2021 21:04:32 +0000 (23:04 +0200)
there is no need to return stale report, as the caller is not interested
in it.

Signed-off-by: Kefu Chai <kchai@redhat.com>
(cherry picked from commit 09216c01be6f57938b1bdb491e45ecfb15a3f6c5)

 Conflicts:
src/mon/OSDMonitor.h
because auto in master was map<int, failure_reporter_t>::iterator
        in octopus

src/mon/OSDMonitor.h

index 131f789ebdbcac2a5a155a5ed22ede2b1e92211f..896ea3c1f5d614dbd8462abb6a99bf91abfc5bcf 100644 (file)
@@ -53,7 +53,8 @@ struct failure_reporter_t {
   MonOpRequestRef op;       ///< failure op request
 
   failure_reporter_t() {}
-  explicit failure_reporter_t(utime_t s) : failed_since(s) {}
+  failure_reporter_t(utime_t s, MonOpRequestRef op)
+    : failed_since(s), op(op) {}
   ~failure_reporter_t() { }
 };
 
@@ -76,20 +77,15 @@ struct failure_info_t {
     return max_failed_since;
   }
 
-  // set the message for the latest report.  return any old op request we had,
-  // if any, so we can discard it.
-  MonOpRequestRef add_report(int who, utime_t failed_since,
-                            MonOpRequestRef op) {
-    map<int, failure_reporter_t>::iterator p = reporters.find(who);
-    if (p == reporters.end()) {
-      if (max_failed_since != utime_t() && max_failed_since < failed_since)
+  // set the message for the latest report.
+  void add_report(int who, utime_t failed_since, MonOpRequestRef op) {
+    [[maybe_unused]] auto [it, new_reporter] =
+      reporters.insert_or_assign(who, failure_reporter_t{failed_since, op});
+    if (new_reporter) {
+      if (max_failed_since != utime_t() && max_failed_since < failed_since) {
        max_failed_since = failed_since;
-      p = reporters.insert(map<int, failure_reporter_t>::value_type(who, failure_reporter_t(failed_since))).first;
+      }
     }
-
-    MonOpRequestRef ret = p->second.op;
-    p->second.op = op;
-    return ret;
   }
 
   void take_report_messages(list<MonOpRequestRef>& ls) {
@@ -103,14 +99,9 @@ struct failure_info_t {
     }
   }
 
-  MonOpRequestRef cancel_report(int who) {
-    map<int, failure_reporter_t>::iterator p = reporters.find(who);
-    if (p == reporters.end())
-      return MonOpRequestRef();
-    MonOpRequestRef ret = p->second.op;
-    reporters.erase(p);
+  void cancel_report(int who) {
+    reporters.erase(who);
     max_failed_since = utime_t();
-    return ret;
   }
 };