summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/pick_address.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/common/pick_address.cc b/src/common/pick_address.cc
index 90327666ad5..ff036c61360 100644
--- a/src/common/pick_address.cc
+++ b/src/common/pick_address.cc
@@ -48,6 +48,24 @@ static const struct sockaddr *find_ip_in_subnet_list(CephContext *cct,
return NULL;
}
+// observe this change
+struct Observer : public md_config_obs_t {
+ const char *conf_var;
+ Observer(const char *c) : conf_var(c) {}
+
+ const char** get_tracked_conf_keys() const {
+ static const char *foo[] = {
+ conf_var,
+ NULL
+ };
+ return foo;
+ }
+ void handle_conf_change(const struct md_config_t *conf,
+ const std::set <std::string> &changed) {
+ // do nothing.
+ }
+};
+
static void fill_in_one_address(CephContext *cct,
const struct ifaddrs *ifa,
const string networks,
@@ -75,8 +93,14 @@ static void fill_in_one_address(CephContext *cct,
exit(1);
}
+ Observer obs(conf_var);
+
+ cct->_conf->add_observer(&obs);
+
cct->_conf->set_val_or_die(conf_var, buf);
cct->_conf->apply_changes(NULL);
+
+ cct->_conf->remove_observer(&obs);
}
void pick_addresses(CephContext *cct, int needs)