]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
common/config: report failed mon config values to mgr
authorSage Weil <sage@redhat.com>
Wed, 10 Jan 2018 23:06:56 +0000 (17:06 -0600)
committerSage Weil <sage@redhat.com>
Tue, 6 Mar 2018 20:44:49 +0000 (14:44 -0600)
If we can't set a mon config value, report that back to the mgr.

Signed-off-by: Sage Weil <sage@redhat.com>
src/common/config.cc
src/common/config.h
src/mgr/DaemonServer.cc
src/mgr/DaemonState.h

index 0c7a3ac5e85d5002539c7d6b5223a2f5dab1927a..3c22efd7a005c883049a01f87a01f34788842386 100644 (file)
@@ -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<string,string>& 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<string,string>& 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<string,string>& 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;
 }
index bfa2bef2d5b4100b1da21b636090107aa4f309a0..7b90ad43be7d291df3d5805fe4e112f7aad91713 100644 (file)
@@ -104,7 +104,10 @@ public:
    */
   std::map<std::string, map<int32_t,Option::value_t>> values;
 
-  /// encoded, cached copy of of values
+  /// values from mon that we failed to set
+  std::map<std::string,std::string> ignored_mon_values;
+
+  /// encoded, cached copy of of values + ignored_mon_values
   bufferlist values_bl;
 
   /// encoded copy of defaults (map<string,string>)
index ea97198310270f2a3930e2487f1786858aac8fe2..71aed90f22b9ac4680a69d4989ebf0e0b2c6ad17 100644 (file)
@@ -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) {
index 9bd0ce2c6abc2e6976048e1a0116e4d28f247a49..8ff21144ff3f5bd767fd36334bd0381bc774a356 100644 (file)
@@ -109,6 +109,9 @@ class DaemonState
   // running config
   std::map<std::string,std::map<int32_t,std::string>> config;
 
+  // mon config values we failed to set
+  std::map<std::string,std::string> ignored_mon_config;
+
   // compiled-in config defaults (rarely used, so we leave them encoded!)
   bufferlist config_defaults_bl;
   std::map<std::string,std::string> config_defaults;