- mds
flags:
- runtime
+- name: mds_cache_quiesce_decay_rate
+ type: float
+ level: advanced
+ desc: decay rate for quiescing inodes throttle
+ default: 1
+ services:
+ - mds
+ flags:
+ - runtime
+- name: mds_cache_quiesce_threshold
+ type: size
+ level: advanced
+ desc: threshold for number of inodes that can be quiesced
+ default: 512_K
+ services:
+ - mds
+ flags:
+ - runtime
+- name: mds_cache_quiesce_sleep
+ type: millisecs
+ level: advanced
+ desc: sleep time for request after passing quiesce threshold
+ default: 200
+ services:
+ - mds
+ flags:
+ - runtime
- name: mds_max_file_recover
type: uint
level: advanced
filer(m->objecter, m->finisher),
stray_manager(m, purge_queue_),
recovery_queue(m),
- trim_counter(g_conf().get_val<double>("mds_cache_trim_decay_rate"))
+ trim_counter(g_conf().get_val<double>("mds_cache_trim_decay_rate")),
+ quiesce_counter(g_conf().get_val<double>("mds_cache_trim_decay_rate")),
+ quiesce_threshold(g_conf().get_val<Option::size_t>("mds_cache_quiesce_threshold")),
+ quiesce_sleep(g_conf().get_val<std::chrono::milliseconds>("mds_cache_quiesce_sleep"))
{
migrator.reset(new Migrator(mds, this));
cache_health_threshold = g_conf().get_val<double>("mds_health_cache_threshold");
if (changed.count("mds_cache_mid"))
lru.lru_set_midpoint(g_conf().get_val<double>("mds_cache_mid"));
+ if (changed.count("mds_cache_quiesce_decay_rate")) {
+ quiesce_counter = DecayCounter(g_conf().get_val<double>("mds_cache_quiesce_decay_rate"));
+ }
+ if (changed.count("mds_cache_quiesce_threshold")) {
+ quiesce_threshold = g_conf().get_val<Option::size_t>("mds_cache_quiesce_threshold");
+ }
+ if (changed.count("mds_cache_quiesce_sleep")) {
+ quiesce_sleep = g_conf().get_val<std::chrono::milliseconds>("mds_cache_quiesce_sleep");
+ }
if (changed.count("mds_cache_trim_decay_rate")) {
trim_counter = DecayCounter(g_conf().get_val<double>("mds_cache_trim_decay_rate"));
}
dout(20) << __func__ << " " << *mdr << " quiescing " << *in << dendl;
+ if (quiesce_counter.get() > quiesce_threshold) {
+ dout(20) << __func__
+ << " quiesce counter " << quiesce_counter
+ << " threshold (" << quiesce_threshold
+ << ") reached: scheduling retry" << dendl;
+ mds->timer.add_event_after(quiesce_sleep, new C_MDS_RetryRequest(this, mdr));
+ return;
+ }
+ quiesce_counter.hit();
{
/* Acquire authpins on `in` to prevent migrations after this rank considers
uint64_t kill_shutdown_at = 0;
std::map<inodeno_t, MDRequestRef> quiesced_subvolumes;
+ DecayCounter quiesce_counter;
+ uint64_t quiesce_threshold;
+ std::chrono::milliseconds quiesce_sleep;
};
class C_MDS_RetryRequest : public MDSInternalContext {
"mds_cache_memory_limit",
"mds_cache_mid",
"mds_cache_reservation",
+ "mds_cache_quiesce_decay_rate",
+ "mds_cache_quiesce_threshold",
+ "mds_cache_quiesce_sleep",
"mds_cache_trim_decay_rate",
"mds_cap_acquisition_throttle_retry_request_time",
"mds_cap_revoke_eviction_timeout",