]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/ConfigMonitor: fix loading of non-module mgr config options 23846/head
authorSage Weil <sage@redhat.com>
Fri, 31 Aug 2018 22:04:42 +0000 (17:04 -0500)
committerSage Weil <sage@redhat.com>
Fri, 31 Aug 2018 22:09:19 +0000 (17:09 -0500)
"*/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 <sage@redhat.com>
src/mon/ConfigMonitor.cc

index 246aa161775993c66184a0084d95dafbfc2aebfb..83c3dfb073d28307467d1c53c8501ea07c6efb86 100644 (file)
@@ -647,22 +647,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;