]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: Monitor: observe conf changes and report on unsage option values
authorJoao Eduardo Luis <joao.luis@inktank.com>
Mon, 23 Jun 2014 22:04:02 +0000 (23:04 +0100)
committerJoao Eduardo Luis <joao.luis@inktank.com>
Mon, 23 Jun 2014 22:09:21 +0000 (23:09 +0100)
Fixes: #8605
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
src/mon/Monitor.cc
src/mon/Monitor.h

index e256a8614eb2c3ff8e66b344d559e8bded6f6490..460009500b226bc8091a3174aecb3322b4d9c26b 100644 (file)
@@ -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<std::string> &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;
 }
index 723d78bddbbbefa970c304802993fafd7094dbc3..e83b7bce4bd3bb19ec140ecbfb0c5eb0b5302667 100644 (file)
@@ -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<std::string> &changed);
+
   int sanitize_options();
   int preinit();
   int init();