From: Joao Eduardo Luis Date: Mon, 23 Jun 2014 22:04:02 +0000 (+0100) Subject: mon: Monitor: observe conf changes and report on unsage option values X-Git-Tag: v0.83~50^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9804360884659dce39d456abb4b828b0d652a8bc;p=ceph.git mon: Monitor: observe conf changes and report on unsage option values Fixes: #8605 Signed-off-by: Joao Eduardo Luis --- diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index e256a8614eb2..460009500b22 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -386,6 +386,23 @@ void Monitor::write_features(MonitorDBStore::Transaction &t) t.put(MONITOR_NAME, COMPAT_SET_LOC, bl); } +const char** Monitor::get_tracked_conf_keys() const +{ + static const char* KEYS[] = { + "mon_lease", + "mon_lease_renew_interval", + "mon_lease_ack_timeout", + NULL + }; + return KEYS; +} + +void Monitor::handle_conf_change(const struct md_config_t *conf, + const std::set &changed) +{ + sanitize_options(); +} + int Monitor::sanitize_options() { int r = 0; @@ -393,9 +410,10 @@ int Monitor::sanitize_options() // mon_lease must be greater than mon_lease_renewal; otherwise we // may incur in leases expiring before they are renewed. if (g_conf->mon_lease <= g_conf->mon_lease_renew_interval) { - derr << "'mon_lease' (val: " << g_conf->mon_lease << ") must be greater " - << "than 'mon_lease_renew_interval' (val: " - << g_conf->mon_lease_renew_interval << ")" << dendl; + clog.error() << "'mon_lease' (val: " << g_conf->mon_lease + << ") must be greater " + << "than 'mon_lease_renew_interval' (val: " + << g_conf->mon_lease_renew_interval << ")"; r = -EINVAL; } @@ -405,9 +423,10 @@ int Monitor::sanitize_options() // the monitors happened to be overloaded -- or even under normal load for // a small enough value. if (g_conf->mon_lease_ack_timeout <= g_conf->mon_lease) { - derr << "'mon_lease_ack_timeout' (val: " << g_conf->mon_lease_ack_timeout - << ") must be greater than 'mon_lease' (val: " - << g_conf->mon_lease << ")" << dendl; + clog.error() << "'mon_lease_ack_timeout' (val: " + << g_conf->mon_lease_ack_timeout + << ") must be greater than 'mon_lease' (val: " + << g_conf->mon_lease << ")"; r = -EINVAL; } return r; @@ -606,6 +625,9 @@ int Monitor::preinit() assert(r == 0); lock.Lock(); + // add ourselves as a conf observer + g_conf->add_observer(this); + lock.Unlock(); return 0; } diff --git a/src/mon/Monitor.h b/src/mon/Monitor.h index 723d78bddbbb..e83b7bce4bd3 100644 --- a/src/mon/Monitor.h +++ b/src/mon/Monitor.h @@ -106,7 +106,8 @@ struct MonCommand; #define COMPAT_SET_LOC "feature_set" -class Monitor : public Dispatcher { +class Monitor : public Dispatcher, + public md_config_obs_t { public: // me string name; @@ -771,6 +772,11 @@ public: static int check_features(MonitorDBStore *store); + // config observer + virtual const char** get_tracked_conf_keys() const; + virtual void handle_conf_change(const struct md_config_t *conf, + const std::set &changed); + int sanitize_options(); int preinit(); int init();