From 926ec5b4c505bbef1f9574d6df5548b470f3bf57 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 10 Jan 2018 17:06:56 -0600 Subject: [PATCH] common/config: report failed mon config values to mgr If we can't set a mon config value, report that back to the mgr. Signed-off-by: Sage Weil --- src/common/config.cc | 25 +++++++++++++++++++++++++ src/common/config.h | 5 ++++- src/mgr/DaemonServer.cc | 8 ++++++-- src/mgr/DaemonState.h | 3 +++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/common/config.cc b/src/common/config.cc index 0c7a3ac5e85..3c22efd7a00 100644 --- a/src/common/config.cc +++ b/src/common/config.cc @@ -267,6 +267,7 @@ void md_config_t::set_val_default(const string& name, const std::string& val) int md_config_t::set_mon_vals(CephContext *cct, const map& kv) { Mutex::Locker l(lock); + ignored_mon_values.clear(); for (auto& i : kv) { const Option *o = find_option(i.first); if (!o) { @@ -275,6 +276,7 @@ int md_config_t::set_mon_vals(CephContext *cct, const map& kv) continue; } if (o->has_flag(Option::FLAG_NO_MON_UPDATE)) { + ignored_mon_values.emplace(i); continue; } std::string err; @@ -282,6 +284,7 @@ int md_config_t::set_mon_vals(CephContext *cct, const map& kv) if (r < 0) { lderr(cct) << __func__ << " failed to set " << i.first << " = " << i.second << ": " << err << dendl; + ignored_mon_values.emplace(i); } else if (r == 0) { ldout(cct,20) << __func__ << " " << i.first << " = " << i.second << " (no change)" << dendl; @@ -933,8 +936,30 @@ void md_config_t::get_config_bl(bufferlist *bl) ::encode(stringify(j.second), bl); } } + // make sure overridden items appear, and include the default value + for (auto& i : ignored_mon_values) { + if (values.count(i.first)) { + continue; + } + if (i.first == "fsid" || + i.first == "host") { + continue; + } + const Option *opt = find_option(i.first); + if (!opt) { + continue; + } + ++n; + ::encode(i.first, bl); + ::encode((uint32_t)1, bl); + ::encode((int32_t)CONF_DEFAULT, bl); + string val; + conf_stringify(_get_val_default(*opt), &val); + ::encode(val, bl); + } ::encode(n, values_bl); values_bl.claim_append(bl); + ::encode(ignored_mon_values, values_bl); } *bl = values_bl; } diff --git a/src/common/config.h b/src/common/config.h index bfa2bef2d5b..7b90ad43be7 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -104,7 +104,10 @@ public: */ std::map> values; - /// encoded, cached copy of of values + /// values from mon that we failed to set + std::map ignored_mon_values; + + /// encoded, cached copy of of values + ignored_mon_values bufferlist values_bl; /// encoded copy of defaults (map) diff --git a/src/mgr/DaemonServer.cc b/src/mgr/DaemonServer.cc index ea971983102..71aed90f22b 100644 --- a/src/mgr/DaemonServer.cc +++ b/src/mgr/DaemonServer.cc @@ -393,7 +393,9 @@ bool DaemonServer::handle_open(MMgrOpen *m) auto p = m->config_bl.begin(); if (p != m->config_bl.end()) { ::decode(daemon->config, p); - dout(20) << " got config " << daemon->config << dendl; + ::decode(daemon->ignored_mon_config, p); + dout(20) << " got config " << daemon->config + << " ignored " << daemon->ignored_mon_config << dendl; } daemon->config_defaults_bl = m->config_defaults_bl; daemon->config_defaults.clear(); @@ -505,7 +507,9 @@ bool DaemonServer::handle_report(MMgrReport *m) auto p = m->config_bl.begin(); if (p != m->config_bl.end()) { ::decode(daemon->config, p); - dout(20) << " got config " << daemon->config << dendl; + ::decode(daemon->ignored_mon_config, p); + dout(20) << " got config " << daemon->config + << " ignored " << daemon->ignored_mon_config << dendl; } if (daemon->service_daemon) { diff --git a/src/mgr/DaemonState.h b/src/mgr/DaemonState.h index 9bd0ce2c6ab..8ff21144ff3 100644 --- a/src/mgr/DaemonState.h +++ b/src/mgr/DaemonState.h @@ -109,6 +109,9 @@ class DaemonState // running config std::map> config; + // mon config values we failed to set + std::map ignored_mon_config; + // compiled-in config defaults (rarely used, so we leave them encoded!) bufferlist config_defaults_bl; std::map config_defaults; -- 2.47.3