]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mon/MDSMonitor: fix segv when multiple MDSs raise same alert
authorSage Weil <sage@redhat.com>
Wed, 12 Jul 2017 21:44:02 +0000 (17:44 -0400)
committerSage Weil <sage@redhat.com>
Wed, 12 Jul 2017 21:44:02 +0000 (17:44 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/mon/MDSMonitor.cc
src/mon/health_check.h

index c38e681a0312cb2dade30af693952d3e6e7cc6bb..d5a350efb37b7dd5e2f407704171193fc23ceb6e 100644 (file)
@@ -203,7 +203,7 @@ void MDSMonitor::encode_pending(MonitorDBStore::TransactionRef t)
     }
     for (const auto &metric : health.metrics) {
       int const rank = info.rank;
-      health_check_t *check = &new_checks.add(
+      health_check_t *check = &new_checks.get_or_add(
        mds_metric_name(metric.type),
        metric.sev,
        mds_metric_summary(metric.type));
index e9e53836e477403b7fbf5f43ad0ddc7fa5c4863f..f0c00d176e870801da679e5016caf2580aeda4e0 100644 (file)
@@ -100,6 +100,14 @@ struct health_check_map_t {
     r.summary = summary;
     return r;
   }
+  health_check_t& get_or_add(const std::string& code,
+                            health_status_t severity,
+                            const std::string& summary) {
+    health_check_t& r = checks[code];
+    r.severity = severity;
+    r.summary = summary;
+    return r;
+  }
 
   void merge(const health_check_map_t& o) {
     for (auto& p : o.checks) {