Default is 24h interval, adjustable via 'mon_scrub_interval'.
Signed-off-by: Joao Eduardo Luis <joao@suse.de>
OPTION(mon_data_avail_crit, OPT_INT, 5)
OPTION(mon_data_avail_warn, OPT_INT, 30)
OPTION(mon_data_size_warn, OPT_U64, 15*1024*1024*1024) // issue a warning when the monitor's data store goes over 15GB (in bytes)
+OPTION(mon_scrub_interval, OPT_INT, 3600*24) // once a day
OPTION(mon_config_key_max_entry_size, OPT_INT, 4096) // max num bytes per config-key entry
OPTION(mon_sync_timeout, OPT_DOUBLE, 60.0)
OPTION(mon_sync_max_payload_size, OPT_U32, 1048576) // max size for a sync chunk payload (say, 1MB)
required_features(0),
leader(0),
quorum_features(0),
+ // scrub
scrub_version(0),
+ scrub_event(NULL),
// sync state
sync_provider_count(0),
cancel_probe_timeout();
timecheck_finish();
health_events_cleanup();
+ scrub_event_cancel();
leader_since = utime_t();
if (!quorum.empty()) {
timecheck_start();
health_tick_start();
do_health_to_clog_interval();
+ scrub_event_start();
}
}
clog->info() << "scrub ok on " << quorum << ": " << mine << "\n";
scrub_reset();
+ scrub_event_start();
}
void Monitor::scrub_reset()
}
+void Monitor::scrub_event_start()
+{
+ dout(10) << __func__ << dendl;
+
+ if (scrub_event)
+ scrub_event_cancel();
+
+ scrub_event = new C_Scrub(this);
+ timer.add_event_after(cct->_conf->mon_scrub_interval, scrub_event);
+}
+
+void Monitor::scrub_event_cancel()
+{
+ dout(10) << __func__ << dendl;
+ if (scrub_event) {
+ timer.cancel_event(scrub_event);
+ scrub_event = NULL;
+ }
+}
/************ TICK ***************/
void scrub_finish();
void scrub_reset();
+ struct C_Scrub : public Context {
+ Monitor *mon;
+ C_Scrub(Monitor *m) : mon(m) { }
+ void finish(int r) {
+ mon->scrub();
+ }
+ };
+ Context *scrub_event;
+ void scrub_event_start();
+ void scrub_event_cancel();
+
/**
* @defgroup Monitor_h_sync Synchronization
* @{