]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: consider max age of dispatch queue when finding stale client 23507/head
authorYan, Zheng <zyan@redhat.com>
Thu, 12 Jul 2018 02:52:57 +0000 (10:52 +0800)
committerYan, Zheng <zyan@redhat.com>
Thu, 9 Aug 2018 09:09:34 +0000 (17:09 +0800)
session renew messages from clients can be in the dispatch queue,
waiting for getting dispatched.

Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
(cherry picked from commit 2ca5708df6cdb4732e7ced3dcf37c966a09aa4d2)

 Conflicts:
src/mds/Server.cc

src/mds/MDSRank.cc
src/mds/MDSRank.h
src/mds/Server.cc

index 7f6f15b9a02bc699b9297eb51748c6d44f8870c4..4f60f0dc25c73a97d8e4b3bb14ed607494b487a3 100644 (file)
@@ -1020,6 +1020,11 @@ utime_t MDSRank::get_laggy_until() const
   return beacon.get_laggy_until();
 }
 
+double MDSRank::get_dispatch_queue_max_age(utime_t now) const
+{
+  return messenger->get_dispatch_queue_max_age(now);
+}
+
 bool MDSRank::is_daemon_stopping() const
 {
   return stopping;
index e524f99174a7b0eded4f9b696c4ca0a0894fef77..0eb91896474e96b7e8c2702eae4937f1267d5769 100644 (file)
@@ -359,6 +359,7 @@ class MDSRank {
     void damaged_unlocked();
 
     utime_t get_laggy_until() const;
+    double get_dispatch_queue_max_age(utime_t now) const;
 
     void send_message_mds(Message *m, mds_rank_t mds);
     void forward_message_mds(Message *req, mds_rank_t mds);
index fd48bea1918839a484920ffcbd5d4e18e2951803..3d0ee254b200f6ee22dab7557d7b234f5f62a14b 100644 (file)
@@ -707,7 +707,10 @@ void Server::find_idle_sessions()
   // timeout/stale
   //  (caps go stale, lease die)
   utime_t now = ceph_clock_now();
+  double queue_max_age = mds->get_dispatch_queue_max_age(now);
+
   utime_t cutoff = now;
+  cutoff -= queue_max_age;
   cutoff -= g_conf->mds_session_timeout;  
   while (1) {
     Session *session = mds->sessionmap.get_oldest_session(Session::STATE_OPEN);
@@ -729,6 +732,7 @@ void Server::find_idle_sessions()
 
   // autoclose
   cutoff = now;
+  cutoff -= queue_max_age;
   cutoff -= g_conf->mds_session_autoclose;
 
   // don't kick clients if we've been laggy