From: Venky Shankar Date: Tue, 3 Jul 2018 12:06:39 +0000 (-0400) Subject: mds: allow request load average decay rate configurable via admin socket X-Git-Tag: v13.2.3~57^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b35795237157d8bc462ba82b6a0d701d420f4513;p=ceph.git mds: allow request load average decay rate configurable via admin socket Signed-off-by: Venky Shankar (cherry picked from commit 3809d96a5b53721b88602d662c4c1cd00dd727a0) Conflicts: src/mds/MDSDaemon.cc src/mds/MDSRank.h --- diff --git a/src/mds/MDSDaemon.cc b/src/mds/MDSDaemon.cc index d0197195946..b71789efc8e 100644 --- a/src/mds/MDSDaemon.cc +++ b/src/mds/MDSDaemon.cc @@ -391,6 +391,7 @@ const char** MDSDaemon::get_tracked_conf_keys() const "host", "fsid", "mds_cap_revoke_eviction_timeout", + "mds_request_load_average_decay_rate", NULL }; return KEYS; diff --git a/src/mds/MDSRank.h b/src/mds/MDSRank.h index e15d7e1e54b..e86dace8956 100644 --- a/src/mds/MDSRank.h +++ b/src/mds/MDSRank.h @@ -224,6 +224,7 @@ class MDSRank { const std::set &changed) { server->handle_conf_change(conf, changed); + sessionmap.handle_conf_change(conf, changed); mdcache->handle_conf_change(conf, changed, *mdsmap); purge_queue.handle_conf_change(conf, changed, *mdsmap); } diff --git a/src/mds/SessionMap.cc b/src/mds/SessionMap.cc index 7a2d6d08b25..52805665064 100644 --- a/src/mds/SessionMap.cc +++ b/src/mds/SessionMap.cc @@ -975,6 +975,29 @@ void SessionMap::hit_session(Session *session) { session->hit_session(); } +void SessionMap::handle_conf_change(const struct md_config_t *conf, + const std::set &changed) { + if (changed.count("mds_request_load_average_decay_rate")) { + decay_rate = conf->get_val("mds_request_load_average_decay_rate"); + dout(20) << __func__ << " decay rate changed to " << decay_rate << dendl; + + total_load_avg_rate = DecayRate(decay_rate); + + auto p = by_state.find(Session::STATE_OPEN); + if (p != by_state.end()) { + for (const auto &session : *(p->second)) { + session->set_load_avg_decay_rate(decay_rate); + } + } + p = by_state.find(Session::STATE_STALE); + if (p != by_state.end()) { + for (const auto &session : *(p->second)) { + session->set_load_avg_decay_rate(decay_rate); + } + } + } +} + int SessionFilter::parse( const std::vector &args, std::stringstream *ss) diff --git a/src/mds/SessionMap.h b/src/mds/SessionMap.h index c0a35eb85e4..1a4043948f1 100644 --- a/src/mds/SessionMap.h +++ b/src/mds/SessionMap.h @@ -699,6 +699,8 @@ private: public: void hit_session(Session *session); + void handle_conf_change(const struct md_config_t *conf, + const std::set &changed); }; std::ostream& operator<<(std::ostream &out, const Session &s);