]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: check last laggy before marking unresponsive client stale 28642/head
authorYan, Zheng <zyan@redhat.com>
Wed, 19 Jun 2019 06:39:55 +0000 (14:39 +0800)
committerYan, Zheng <zyan@redhat.com>
Wed, 19 Jun 2019 06:48:40 +0000 (14:48 +0800)
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" <zyan@redhat.com>
src/mds/Server.cc

index 54c9c7d15dfe98d20098f4ccd053242cac0624bc..11752380450c5b3963c8067e90c19ec3df8aa157 100644 (file)
@@ -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<bool>("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<Session*> to_evict;
 
+  bool defer_session_stale = g_conf().get_val<bool>("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<Session*> 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()) {