From 43622b17fba5f7b41dab46d31140a497c129babf Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 12 Jul 2017 17:44:02 -0400 Subject: [PATCH] mon/MDSMonitor: fix segv when multiple MDSs raise same alert Signed-off-by: Sage Weil --- src/mon/MDSMonitor.cc | 2 +- src/mon/health_check.h | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index c38e681a031..d5a350efb37 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -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)); diff --git a/src/mon/health_check.h b/src/mon/health_check.h index e9e53836e47..f0c00d176e8 100644 --- a/src/mon/health_check.h +++ b/src/mon/health_check.h @@ -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) { -- 2.39.5