From 2dff777ba99c166da48a50aead90482b93106958 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 30 Jul 2019 22:54:25 -0500 Subject: [PATCH] mon/HealthMonitor: add sticky flag to mutes Signed-off-by: Sage Weil --- src/mon/HealthMonitor.cc | 3 +++ src/mon/MonCommands.h | 8 ++++++-- src/mon/Monitor.cc | 3 +++ src/mon/health_check.h | 4 ++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/mon/HealthMonitor.cc b/src/mon/HealthMonitor.cc index 8b94cfb2334..7945365ad04 100644 --- a/src/mon/HealthMonitor.cc +++ b/src/mon/HealthMonitor.cc @@ -274,12 +274,14 @@ bool HealthMonitor::prepare_command(MonOpRequestRef op) 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)) { @@ -295,6 +297,7 @@ bool HealthMonitor::prepare_command(MonOpRequestRef op) 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)) { diff --git a/src/mon/MonCommands.h b/src/mon/MonCommands.h index b51979ed87d..5c0a47c80c5 100644 --- a/src/mon/MonCommands.h +++ b/src/mon/MonCommands.h @@ -211,9 +211,13 @@ COMMAND_WITH_FLAG("injectargs " \ 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", \ diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index ec81805637e..d81bbabec20 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -2881,6 +2881,9 @@ health_status_t Monitor::get_health_status( *plain += "0s"; } } + if (q->second.sticky) { + *plain += ", STICKY"; + } *plain += ") "; } *plain += "["s + short_health_string(p.second.severity) + "] " + diff --git a/src/mon/health_check.h b/src/mon/health_check.h index 0b08435043e..9135b892d39 100644 --- a/src/mon/health_check.h +++ b/src/mon/health_check.h @@ -64,11 +64,13 @@ WRITE_CLASS_DENC(health_check_t) 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); } @@ -77,6 +79,7 @@ struct health_mute_t { if (ttl != utime_t()) { f->dump_stream("ttl") << ttl; } + f->dump_bool("sticky", sticky); } static void generate_test_instances(std::list& ls) { @@ -84,6 +87,7 @@ struct health_mute_t { 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) -- 2.39.5