From e8f6eeed0ea1f0f775c0aba5136bcccfa5159388 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 31 Aug 2018 17:04:42 -0500 Subject: [PATCH] mon/ConfigMonitor: fix loading of non-module mgr config options "*/mgr/*" is special (including "global/mgr/*" and "mgr/mgr/*" and "mgr.foo/mgr/*". "mgr/*" is wrong. Fixes: http://tracker.ceph.com/issues/35076 Signed-off-by: Sage Weil (cherry picked from commit b56984645c355bca5478e7ffd4629341477a50e4) Conflicts: src/mon/ConfigMonitor.cc : Resovled in load_config --- src/mon/ConfigMonitor.cc | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/mon/ConfigMonitor.cc b/src/mon/ConfigMonitor.cc index c2627c076011e..28c960dd471ea 100644 --- a/src/mon/ConfigMonitor.cc +++ b/src/mon/ConfigMonitor.cc @@ -633,22 +633,23 @@ void ConfigMonitor::load_config() } string section_name; - if (key.find("mgr") == 0) { - name = key.substr(key.find('/') + 1); - MaskedOption mopt(new Option(name, Option::TYPE_STR, Option::LEVEL_UNKNOWN)); + if (key.find("/mgr/") != std::string::npos) { + // mgr module option, "something/mgr/foo" + name = key.substr(key.find("/mgr/") + 1); + MaskedOption mopt(new Option(name, Option::TYPE_STR, + Option::LEVEL_UNKNOWN)); mopt.raw_value = value; Section *section = &config_map.global;; section_name = "mgr"; - if (section_name.size()) { - if (section_name.find('.') != std::string::npos) { - section = &config_map.by_id[section_name]; - } else { - section = &config_map.by_type[section_name]; - } + if (section_name.find('.') != std::string::npos) { + section = &config_map.by_id[section_name]; + } else { + section = &config_map.by_type[section_name]; } section->options.insert(make_pair(name, std::move(mopt))); ++num; } else { + // normal option const Option *opt = g_conf->find_option(name); if (!opt) { dout(10) << __func__ << " unrecognized option '" << name << "'" << dendl; -- 2.39.5