]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common: trigger all observers on startup
authorSage Weil <sage@newdream.net>
Thu, 29 Dec 2011 19:57:55 +0000 (11:57 -0800)
committerSage Weil <sage@newdream.net>
Thu, 29 Dec 2011 19:57:55 +0000 (11:57 -0800)
Among other things, this makes err-to-stderr and friends initialize
properly in the DoutStreamBuf.

Signed-off-by: Sage Weil <sage@newdream.net>
src/common/common_init.cc
src/common/config.cc
src/common/config.h

index 1d874f0d68035b3c846dd4f3e278542cb2c13db2..58bbf6d40e89c687967ac3f7cd3b4939d6442fe1 100644 (file)
@@ -101,7 +101,7 @@ void common_init_finish(CephContext *cct)
   // Trigger callbacks on any config observers that were waiting for
   // it to become safe to start threads.
   cct->_conf->set_val("internal_safe_to_start_threads", "true");
-  cct->_conf->apply_changes(NULL);
+  cct->_conf->call_all_observers();
 }
 
 void common_destroy_context(CephContext *cct)
index 4c2bc0d90188c6f0d5caab48adbe030daa567239..e877cde9c170d66e66d8ec48ddd4918949d7af74 100644 (file)
@@ -424,6 +424,28 @@ void md_config_t::apply_changes(std::ostringstream *oss)
   changed.clear();
 }
 
+void md_config_t::call_all_observers()
+{
+  Mutex::Locker l(lock);
+
+  // Expand all metavariables
+  for (int i = 0; i < NUM_CONFIG_OPTIONS; i++) {
+    config_option *opt = config_optionsp + i;
+    if (opt->type == OPT_STR) {
+      std::string *str = (std::string *)opt->conf_ptr(this);
+      expand_meta(*str);
+    }
+  }
+
+  std::map<md_config_obs_t*,std::set<std::string> > obs;
+  for (obs_map_t::iterator r = observers.begin(); r != observers.end(); ++r)
+    obs[r->second].insert(r->first);
+  for (std::map<md_config_obs_t*,std::set<std::string> >::iterator p = obs.begin();
+       p != obs.end();
+       ++p)
+    p->first->handle_conf_change(this, p->second);
+}
+
 int md_config_t::injectargs(const std::string& s, std::ostringstream *oss)
 {
   int ret;
index f0f6c3feb99bbb48c5be3c38bd9e0a776ad1f004..98819be2ae8183811dee1e141e0897483f7700d8 100644 (file)
@@ -109,6 +109,7 @@ public:
 
   // Expand all metavariables. Make any pending observer callbacks.
   void apply_changes(std::ostringstream *oss);
+  void call_all_observers();
 
   // Called by the Ceph daemons to make configuration changes at runtime
   int injectargs(const std::string &s, std::ostringstream *oss);