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");
void HealthMonitor::create_pending()
{
dout(10) << " " << version << dendl;
+ pending_mutes = mutes;
}
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;
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);
#include <map>
#include "include/health.h"
+#include "include/utime.h"
#include "common/Formatter.h"
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;