]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common/config: move _apply_changes() calls up into ConfigProxy
authorKefu Chai <kchai@redhat.com>
Sun, 15 Jul 2018 09:50:12 +0000 (17:50 +0800)
committerKefu Chai <kchai@redhat.com>
Tue, 24 Jul 2018 02:17:46 +0000 (10:17 +0800)
see also the previous the commit, to reuse injectargs() and
set_mon_vals() in seastar's ConfigProxy, we need to move apply_changes()
call out of them, as this call is implemented differently in seastar's
ConfigProxy.

finalize_reexpand_meta() is not used by OSD at this moment, so we leave
it as it is for now.

* move _apply_changes() calls up into ConfigProxy
* move update_legacy_vals() out of _apply_changes() into the
callers of the latter. as it changes "values", in seastar's ConfigProxy,
it belongs to the first step of changing a config value

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/common/config.cc
src/common/config.h
src/common/config_proxy.h

index 2c5bafbe030469444835cf57295d80bb447feefd..4cb5c8d5fb319d9026c5034245345bafbd43c9b5 100644 (file)
@@ -270,7 +270,6 @@ void md_config_impl<lp>::set_val_default(ConfigValues& values,
 template<LockPolicy lp>
 int md_config_impl<lp>::set_mon_vals(CephContext *cct,
     ConfigValues& values,
-    const ConfigProxy& proxy,
     const map<string,string>& kv,
     config_callback config_cb)
 {
@@ -326,7 +325,7 @@ int md_config_impl<lp>::set_mon_vals(CephContext *cct,
     values.rm_val(name, CONF_MON);
   });
   values_bl.clear();
-  _apply_changes(values, proxy, nullptr);
+  update_legacy_vals(values);
   return 0;
 }
 
@@ -771,8 +770,11 @@ void md_config_impl<lp>::apply_changes(ConfigValues& values,
   /*
    * apply changes until the cluster name is assigned
    */
-  if (values.cluster.size())
+  if (values.cluster.size()) {
+    // meta expands could have modified anything.  Copy it all out again.
+    update_legacy_vals(values);
     _apply_changes(values, proxy, oss);
+  }
 }
 
 template<LockPolicy lp>
@@ -784,9 +786,6 @@ void md_config_impl<lp>::_apply_changes(ConfigValues& values,
    * have changed. */
   typedef std::map < md_config_obs_t*, std::set <std::string> > rev_obs_map_t;
 
-  // meta expands could have modified anything.  Copy it all out again.
-  update_legacy_vals(values);
-
   // create the reverse observer mapping, mapping observers to the set of
   // changed keys that they'll get.
   rev_obs_map_t robs;
@@ -857,7 +856,6 @@ void md_config_impl<lp>::_clear_safe_to_start_threads()
 
 template<LockPolicy lp>
 int md_config_impl<lp>::injectargs(ConfigValues& values,
-                                  const ConfigProxy& proxy,
                                   const std::string& s, std::ostream *oss)
 {
   int ret;
@@ -885,7 +883,7 @@ int md_config_impl<lp>::injectargs(ConfigValues& values,
     *oss << "\n";
     ret = -EINVAL;
   }
-  _apply_changes(values, proxy, oss);
+  update_legacy_vals(values);
   return ret;
 }
 
@@ -1131,8 +1129,11 @@ void md_config_impl<lp>::finalize_reexpand_meta(ConfigValues& values,
     set_val(values, i.first, i.second);
   }
   
-  if (may_reexpand_meta.size())
+  if (may_reexpand_meta.size()) {
+    // meta expands could have modified anything.  Copy it all out again.
+    update_legacy_vals(values);
     _apply_changes(values, proxy, NULL);
+  }
 }
 
 template<LockPolicy lp>
index 938fae210850bd6ba8dc05ec4e18e96997228e0a..747f0985957f94a4e541e522778bf8dc07483873 100644 (file)
@@ -184,13 +184,13 @@ public:
   /// Set a values from mon
   int set_mon_vals(CephContext *cct,
       ConfigValues& values,
-      const ConfigProxy& proxy,
       const map<std::string,std::string>& kv,
       config_callback config_cb);
 
   // Called by the Ceph daemons to make configuration changes at runtime
-  int injectargs(ConfigValues& values, const ConfigProxy& proxy,
-                const std::string &s, std::ostream *oss);
+  int injectargs(ConfigValues& values,
+                const std::string &s,
+                std::ostream *oss);
 
   // Set a configuration value, or crash
   // Metavariables will be expanded.
index 2b34b9a2711fde94e7124c9ac00ec59adf45e446..057cf4d17633df7652a8fb77c0a00be104014a49 100644 (file)
@@ -93,35 +93,16 @@ public:
   }
   // change `values` in-place
   void finalize_reexpand_meta() {
-<<<<<<< HEAD
-    Mutex::Locker l(lock);
-    config.finalize_reexpand_meta(values, *this);
-  }
-  void add_observer(md_config_obs_t* obs) {
-    Mutex::Locker l(lock);
-    config.add_observer(obs);
-  }
-  void remove_observer(md_config_obs_t* obs) {
-    Mutex::Locker l(lock);
-    config.remove_observer(obs);
-  }
-  void call_all_observers() {
-    Mutex::Locker l(lock);
-    config.call_all_observers(*this);
-=======
     Mutex::Locker l{lock};
-    if (config.finalize_reexpand_meta(values, obs_mgr)) {
-      obs_mgr.apply_changes(values.changed, *this, nullptr);
-      values.changed.clear();
-    }
+    config.finalize_reexpand_meta(values, *this);
   }
   void add_observer(md_config_obs_t* obs) {
     Mutex::Locker l{lock};
-    obs_mgr.add_observer(obs);
+    config.add_observer(obs);
   }
   void remove_observer(md_config_obs_t* obs) {
     Mutex::Locker l{lock};
-    obs_mgr.remove_observer(obs);
+    config.remove_observer(obs);
   }
   void call_all_observers() {
     Mutex::Locker l{lock};
@@ -133,8 +114,7 @@ public:
     // An alternative might be to pass a std::unique_lock to
     // handle_conf_change and have a version of get_var that can take it
     // by reference and lock as appropriate.
-    obs_mgr.call_all_observers(*this);
->>>>>>> 9a2bc3c2eb... wip
+    config.call_all_observers(*this);
   }
   void set_safe_to_start_threads() {
     config.set_safe_to_start_threads();
@@ -179,11 +159,17 @@ public:
                   const map<std::string,std::string>& kv,
                   md_config_t::config_callback config_cb) {
     Mutex::Locker l{lock};
-    config.set_mon_vals(cct, values, *this, kv, config_cb);
+    int ret = config.set_mon_vals(cct, values, kv, config_cb);
+    config._apply_changes(values, *this, nullptr);
+    values.changed.clear();
+    return ret;
   }
   int injectargs(const std::string &s, std::ostream *oss) {
     Mutex::Locker l{lock};
-    config.injectargs(values, *this, s, oss);
+    int ret = config.injectargs(values, s, oss);
+    config._apply_changes(values, *this, oss);
+    values.changed.clear();
+    return ret;
   }
   void parse_env(const char *env_var = "CEPH_ARGS") {
     Mutex::Locker l{lock};