From: Yan, Zheng Date: Wed, 19 Jun 2019 06:39:55 +0000 (+0800) Subject: mds: check last laggy before marking unresponsive client stale X-Git-Tag: v15.1.0~2333^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e5cc6f52feb64fa1c7ba1ee2b304cd6588f16e7a;p=ceph.git mds: check last laggy before marking unresponsive client stale Current mds may evict unresponsive client without going through session stale. So we need to adjust the last laggy check. Signed-off-by: "Yan, Zheng" --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 54c9c7d15df..11752380450 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -932,10 +932,17 @@ void Server::find_idle_sessions() // (caps go stale, lease die) double queue_max_age = mds->get_dispatch_queue_max_age(ceph_clock_now()); double cutoff = queue_max_age + mds->mdsmap->get_session_timeout(); - bool defer_session_stale = g_conf().get_val("mds_defer_session_stale"); + + // don't kick clients if we've been laggy + if (last_cleared_laggy < cutoff) { + dout(10) << " last cleared laggy " << last_cleared_laggy << "s ago (< cutoff " << cutoff + << "), not marking any client stale" << dendl; + return; + } std::vector to_evict; + bool defer_session_stale = g_conf().get_val("mds_defer_session_stale"); const auto sessions_p1 = mds->sessionmap.by_state.find(Session::STATE_OPEN); if (sessions_p1 != mds->sessionmap.by_state.end() && !sessions_p1->second->empty()) { std::vector new_stale; @@ -1014,13 +1021,6 @@ void Server::find_idle_sessions() // autoclose cutoff = queue_max_age + mds->mdsmap->get_session_autoclose(); - // don't kick clients if we've been laggy - if (last_cleared_laggy < cutoff) { - dout(10) << " last cleared laggy " << last_cleared_laggy << "s ago (< cutoff " << cutoff - << "), not kicking any clients to be safe" << dendl; - return; - } - // Collect a list of sessions exceeding the autoclose threshold const auto sessions_p2 = mds->sessionmap.by_state.find(Session::STATE_STALE); if (sessions_p2 != mds->sessionmap.by_state.end() && !sessions_p2->second->empty()) {