From 3809d96a5b53721b88602d662c4c1cd00dd727a0 Mon Sep 17 00:00:00 2001 From: Venky Shankar Date: Tue, 3 Jul 2018 08:06:39 -0400 Subject: [PATCH] mds: allow request load average decay rate configurable via admin socket Signed-off-by: Venky Shankar --- src/mds/MDSDaemon.cc | 1 + src/mds/MDSRank.h | 1 + src/mds/SessionMap.cc | 23 +++++++++++++++++++++++ src/mds/SessionMap.h | 2 ++ 4 files changed, 27 insertions(+) diff --git a/src/mds/MDSDaemon.cc b/src/mds/MDSDaemon.cc index 98c524556d7..30974291065 100644 --- a/src/mds/MDSDaemon.cc +++ b/src/mds/MDSDaemon.cc @@ -370,6 +370,7 @@ const char** MDSDaemon::get_tracked_conf_keys() const "mds_inject_migrator_session_race", "host", "fsid", + "mds_request_load_average_decay_rate", NULL }; return KEYS; diff --git a/src/mds/MDSRank.h b/src/mds/MDSRank.h index f2ab258a4fe..2cd8951a8ca 100644 --- a/src/mds/MDSRank.h +++ b/src/mds/MDSRank.h @@ -224,6 +224,7 @@ class MDSRank { void handle_conf_change(const ConfigProxy& conf, const std::set &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 e64f45245bb..50976f0d42f 100644 --- a/src/mds/SessionMap.cc +++ b/src/mds/SessionMap.cc @@ -976,6 +976,29 @@ void SessionMap::hit_session(Session *session) { session->hit_session(); } +void SessionMap::handle_conf_change(const ConfigProxy &conf, + const std::set &changed) { + if (changed.count("mds_request_load_average_decay_rate")) { + decay_rate = g_conf().get_val("mds_request_load_average_decay_rate"); + dout(20) << __func__ << " decay rate changed to " << decay_rate << dendl; + + total_load_avg = DecayCounter(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 8a43e332f46..549e628298d 100644 --- a/src/mds/SessionMap.h +++ b/src/mds/SessionMap.h @@ -715,6 +715,8 @@ private: public: void hit_session(Session *session); + void handle_conf_change(const ConfigProxy &conf, + const std::set &changed); }; std::ostream& operator<<(std::ostream &out, const Session &s); -- 2.39.5