]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common/ceph_context: config diff get option refactored
authoroliveiradan <doliveirabrz@gmail.com>
Thu, 10 Nov 2016 22:14:24 +0000 (15:14 -0700)
committeroliveiradan <doliveirabrz@gmail.com>
Thu, 4 May 2017 05:56:54 +0000 (23:56 -0600)
Signed-off-by: Daniel Oliveira <doliveira@suse.com>
src/common/ceph_context.cc
src/common/config.cc
src/common/config.h

index 43b88d8f1b85a83172bf85bf01a75ad7a72e5652..05842ee6b78fe41055488a4b0f98bca3eb941d5d 100644 (file)
@@ -510,7 +510,8 @@ void CephContext::do_command(std::string command, cmdmap_t& cmdmap,
         def_conf.apply_changes(NULL);
 
         map<string, pair<string, string>> diff;
-        def_conf.diff_setting(_conf, &diff, ceph_setting, true);
+        set<string> unknown;
+        def_conf.diff(_conf, &diff, &unknown, ceph_setting);
         f->open_object_section("diff");
         f->open_object_section("current");
 
index 1f3c8630c76bc69f9813aab74c54f67f3ca275c7..2a91e0d947dccf485a992a6ea66bedd5994d9ba5 100644 (file)
@@ -1342,21 +1342,45 @@ bool md_config_t::expand_meta(std::string &origval,
 }
 
 void md_config_t::diff(
+  const md_config_t *other,
+  map<string, pair<string, string> > *diff,
+  set<string> *unknown) 
+{
+  diff_helper(other, diff, unknown, "");
+}
+void md_config_t::diff(
+  const md_config_t *other,
+  map<string, pair<string, string> > *diff,
+  set<string> *unknown, const string& ceph_setting = string("")) 
+{
+  diff_helper(other, diff, unknown, ceph_setting);
+}
+
+void md_config_t::diff_helper(
     const md_config_t *other,
     map<string,pair<string,string> > *diff,
-    set<string> *unknown)
+    set<string> *unknown, const string& ceph_setting=string(""))
 {
   Mutex::Locker l(lock);
 
+  bool ceph_param_search = !ceph_setting.empty(); 
   char local_buf[4096];
   char other_buf[4096];
   for (auto& opt: *config_options) {
+    if (ceph_param_search) {
+      if (ceph_setting != opt.name) {
+        continue;
+      }
+    }
     memset(local_buf, 0, sizeof(local_buf));
     memset(other_buf, 0, sizeof(other_buf));
 
     char *other_val = other_buf;
     int err = other->get_val(opt.name, &other_val, sizeof(other_buf));
     if (err < 0) {
+      if (ceph_param_search) {
+        continue;
+      }
       if (err == -ENOENT) {
         unknown->insert(opt.name);
       }
@@ -1370,48 +1394,14 @@ void md_config_t::diff(
 
     if (strcmp(local_val, other_val))
       diff->insert(make_pair(opt.name, make_pair(local_val, other_val)));
-  }
-}
-
-void md_config_t::diff_setting(const md_config_t *other, 
-            map<string, pair<string, string>> *diff, 
-            const string& ceph_setting, bool show_unchanged)
-{
-  Mutex::Locker l(lock);
-
-  char local_buf[4096];
-  char other_buf[4096];
-  for (int i = 0; i < NUM_CONFIG_OPTIONS; i++) {
-    config_option *opt = &config_optionsp[i];
-    std::string ceph_setting_name(opt->name);
-    if (ceph_setting != opt->name) {
-      continue;
-    }
-    memset(local_buf, 0, sizeof(local_buf));
-    memset(other_buf, 0, sizeof(other_buf));
-
-    char *other_val = other_buf;
-    int err = other->get_val(opt->name, &other_val, sizeof(other_buf));
-    if (err < 0) {
-      continue;
-    } 
-
-    char *local_val = local_buf;
-    err = _get_val(opt->name, &local_val, sizeof(local_buf));
-    if (err != 0) {
-      continue;
-    } 
-    if (strcmp(local_val, other_val)) {
-      diff->insert(make_pair(ceph_setting, make_pair(local_val, other_val)));
-    }   
     else {
-      if (show_unchanged) {
-        diff->insert(make_pair(ceph_setting, make_pair(local_val, other_val)));
+      if (ceph_param_search) {
+        diff->insert(make_pair(opt.name, make_pair(local_val, other_val)));
+        break;
       }
-    } 
-    break;  
-  } 
-} 
+    }
+  }
+}
 
 void md_config_t::complain_about_parse_errors(CephContext *cct)
 {
index ea4ce47b305295093160122fe920fca7a04be12d..2590c47c80c425ed5912bfebe05b2b473af068aa 100644 (file)
@@ -235,15 +235,15 @@ public:
   /// dump all config values to a formatter
   void show_config(Formatter *f);
 
-  /// obtain a diff between our config values and another md_config_t values
+  /// obtain a diff between our config values and another md_config_t values 
   void diff(const md_config_t *other,
             map<string,pair<string,string> > *diff, set<string> *unknown);
 
-  /// obtain a diff between config values and another md_config_t
+  /// obtain a diff between config values and another md_config_t 
   /// values for a specific setting. 
-  void diff_setting(const md_config_t*, 
-                std::map<std::string, std::pair<std::string, std::string>>*
-                const std::string&, bool show_unchanged = false);
+  void diff(const md_config_t *other,
+            map<string,pair<string,string>> *diff, set<string> *unknown
+            const string& ceph_setting);
 
   /// print/log warnings/errors from parsing the config
   void complain_about_parse_errors(CephContext *cct);
@@ -276,6 +276,11 @@ private:
 
   bool expand_meta(std::string &val,
                   std::ostream *oss) const;
+
+  void diff_helper(const md_config_t *other, 
+                   map<string, pair<string, string>> *diff,
+                   set<string> *unknown, const string &ceph_setting);
+
 public:  // for global_init
   bool early_expand_meta(std::string &val,
                         std::ostream *oss) const {