.set_default(15)
.set_description("tolerance in seconds for MDS internal heartbeat"),
+ Option("mds_heartbeat_reset_grace", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
+ .set_default(1000)
+ .set_description("the basic unit of tolerance in how many circles in a loop, which will"
+ "keep running by holding the mds_lock, it must trigger to reset heartbeat"),
+
Option("mds_enforce_unique_name", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
.set_default(true)
.set_description("require MDS name is unique in the cluster"),
server = new Server(this, &metrics_handler);
locker = new Locker(this, mdcache);
+ _heartbeat_reset_grace = g_conf().get_val<uint64_t>("mds_heartbeat_reset_grace");
heartbeat_grace = g_conf().get_val<double>("mds_heartbeat_grace");
op_tracker.set_complaint_and_threshold(cct->_conf->mds_op_complaint_time,
cct->_conf->mds_op_log_threshold);
"mds_recall_warning_decay_rate",
"mds_request_load_average_decay_rate",
"mds_session_cache_liveness_decay_rate",
+ "mds_heartbeat_reset_grace",
"mds_heartbeat_grace",
"mds_session_cap_acquisition_decay_rate",
"mds_max_caps_per_client",
{
// XXX with or without mds_lock!
+ if (changed.count("mds_heartbeat_reset_grace")) {
+ _heartbeat_reset_grace = conf.get_val<uint64_t>("mds_heartbeat_reset_grace");
+ }
if (changed.count("mds_heartbeat_grace")) {
heartbeat_grace = conf.get_val<double>("mds_heartbeat_grace");
}
* of code while holding the mds_lock
*/
void heartbeat_reset();
+ int heartbeat_reset_grace(int count=1) {
+ return count * _heartbeat_reset_grace;
+ }
/**
* Report state DAMAGED to the mon, and then pass on to respawn(). Call
ceph::heartbeat_handle_d *hb = nullptr; // Heartbeat for threads using mds_lock
double heartbeat_grace;
+ int _heartbeat_reset_grace;
map<mds_rank_t, version_t> peer_mdsmap_epoch;