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;
// 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;
}
// 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;
assert(r == 0);
lock.Lock();
+ // add ourselves as a conf observer
+ g_conf->add_observer(this);
+
lock.Unlock();
return 0;
}
#define COMPAT_SET_LOC "feature_set"
-class Monitor : public Dispatcher {
+class Monitor : public Dispatcher,
+ public md_config_obs_t {
public:
// me
string name;
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();