]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mon/HealthMonitor: maintain list of mutes
authorSage Weil <sage@redhat.com>
Tue, 30 Jul 2019 16:28:55 +0000 (11:28 -0500)
committerSage Weil <sage@redhat.com>
Thu, 15 Aug 2019 01:37:00 +0000 (20:37 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/mon/HealthMonitor.cc
src/mon/HealthMonitor.h
src/mon/health_check.h

index 692bfdf4e7a6941c288dc375f99ee349a2628896..c10670f56de0216e90c381d4314e22b89a812fd6 100644 (file)
@@ -74,6 +74,17 @@ void HealthMonitor::update_from_paxos(bool *need_bootstrap)
     leader_checks.clear();
   }
 
+  {
+    bufferlist bl;
+    mon->store->get(service_name, "mutes", bl);
+    if (bl.length()) {
+      auto p = bl.cbegin();
+      decode(mutes, p);
+    } else {
+      mutes.clear();
+    }
+  }
+
   dout(20) << "dump:";
   JSONFormatter jf(true);
   jf.open_object_section("health");
@@ -92,6 +103,7 @@ void HealthMonitor::update_from_paxos(bool *need_bootstrap)
 void HealthMonitor::create_pending()
 {
   dout(10) << " " << version << dendl;
+  pending_mutes = mutes;
 }
 
 void HealthMonitor::encode_pending(MonitorDBStore::TransactionRef t)
@@ -106,6 +118,11 @@ void HealthMonitor::encode_pending(MonitorDBStore::TransactionRef t)
   bufferlist lbl;
   encode(leader_checks, lbl);
   t->put(service_name, "leader", lbl);
+  {
+    bufferlist bl;
+    encode(pending_mutes, bl);
+    t->put(service_name, "mutes", bl);
+  }
 
   health_check_map_t pending_health;
 
index 05f3bba977a90c5a29bcf4f3fb0264b927e8f2e9..e4b4ee484f2eaf1f4448e051f3a0fad4fbdca64d 100644 (file)
@@ -22,6 +22,11 @@ class HealthMonitor : public PaxosService
   map<int,health_check_map_t> quorum_checks;  // for each quorum member
   health_check_map_t leader_checks;           // leader only
 
+  map<string,health_mute_t> pending_mutes;
+
+public:
+  map<string,health_mute_t> mutes;
+
 public:
   HealthMonitor(Monitor *m, Paxos *p, const string& service_name);
 
index 54dc93b92a3cd95fd5b46857cae4129667cd2839..0b08435043ee68f8bd817b88ac3b706bc29c5135 100644 (file)
@@ -7,6 +7,7 @@
 #include <map>
 
 #include "include/health.h"
+#include "include/utime.h"
 #include "common/Formatter.h"
 
 struct health_check_t {
@@ -60,6 +61,33 @@ struct health_check_t {
 WRITE_CLASS_DENC(health_check_t)
 
 
+struct health_mute_t {
+  std::string code;
+  utime_t ttl;
+
+  DENC(health_mute_t, v, p) {
+    DENC_START(1, 1, p);
+    denc(v.code, p);
+    denc(v.ttl, p);
+    DENC_FINISH(p);
+  }
+
+  void dump(ceph::Formatter *f) const {
+    f->dump_string("code", code);
+    if (ttl != utime_t()) {
+      f->dump_stream("ttl") << ttl;
+    }
+  }
+
+  static void generate_test_instances(std::list<health_mute_t*>& ls) {
+    ls.push_back(new health_mute_t);
+    ls.push_back(new health_mute_t);
+    ls.back()->code = "OSD_DOWN";
+    ls.back()->ttl = utime_t(1, 2);
+  }
+};
+WRITE_CLASS_DENC(health_mute_t)
+
 struct health_check_map_t {
   std::map<std::string,health_check_t> checks;