if (prefix == "health mute") {
string code;
+ bool sticky = false;
if (!cmd_getval(g_ceph_context, cmdmap, "code", code) ||
code == "") {
r = -EINVAL;
ss << "must specify an alert code to mute";
goto out;
}
+ cmd_getval(g_ceph_context, cmdmap, "sticky", sticky);
string ttl_str;
utime_t ttl;
if (cmd_getval(g_ceph_context, cmdmap, "ttl", ttl_str)) {
auto& m = pending_mutes[code];
m.code = code;
m.ttl = ttl;
+ m.sticky = sticky;
} else if (prefix == "health unmute") {
string code;
if (cmd_getval(g_ceph_context, cmdmap, "code", code)) {
COMMAND("status", "show cluster status", "mon", "r")
COMMAND("health name=detail,type=CephChoices,strings=detail,req=false", \
"show cluster health", "mon", "r")
-COMMAND("health mute name=code,type=CephString name=ttl,type=CephString,req=false",
+COMMAND("health mute "\
+ "name=code,type=CephString " \
+ "name=ttl,type=CephString,req=false " \
+ "name=sticky,type=CephBool,req=false",
"mute health alert", "mon", "w")
-COMMAND("health unmute name=code,type=CephString,req=false",
+COMMAND("health unmute "\
+ "name=code,type=CephString,req=false",
"unmute existing health alert mute(s)", "mon", "w")
COMMAND("time-sync-status", "show time sync status", "mon", "r")
COMMAND("df name=detail,type=CephChoices,strings=detail,req=false", \
struct health_mute_t {
std::string code;
utime_t ttl;
+ bool sticky = false;
DENC(health_mute_t, v, p) {
DENC_START(1, 1, p);
denc(v.code, p);
denc(v.ttl, p);
+ denc(v.sticky, p);
DENC_FINISH(p);
}
if (ttl != utime_t()) {
f->dump_stream("ttl") << ttl;
}
+ f->dump_bool("sticky", sticky);
}
static void generate_test_instances(std::list<health_mute_t*>& ls) {
ls.push_back(new health_mute_t);
ls.back()->code = "OSD_DOWN";
ls.back()->ttl = utime_t(1, 2);
+ ls.back()->sticky = true;
}
};
WRITE_CLASS_DENC(health_mute_t)