]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: consider max age of dispatch queue when finding stale client 23506/head
authorYan, Zheng <zyan@redhat.com>
Thu, 12 Jul 2018 02:52:57 +0000 (10:52 +0800)
committerYan, Zheng <zyan@redhat.com>
Thu, 6 Sep 2018 06:38:13 +0000 (14:38 +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)

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

index 521d4f54042155e9fa4e487d62e3ac25f4bf7eed..ef4a0e6557c8d3a1ac6a185e99576b89da4b44f3 100644 (file)
@@ -1073,6 +1073,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 2199908cbc3cf777f8a2315f5409b6aea91ad7bf..87337090dc63e639b61c694b5ac6668d7ebfe268 100644 (file)
@@ -363,6 +363,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 ceabf8f9b44e56896e05107474d41b5313b38d81..2fbc4b3d31b0fb8bf45288b2a4508597389d91e3 100644 (file)
@@ -710,7 +710,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 -= mds->mdsmap->get_session_timeout();
   while (1) {
     Session *session = mds->sessionmap.get_oldest_session(Session::STATE_OPEN);
@@ -732,6 +735,7 @@ void Server::find_idle_sessions()
 
   // autoclose
   cutoff = now;
+  cutoff -= queue_max_age;
   cutoff -= mds->mdsmap->get_session_autoclose();
 
   // don't kick clients if we've been laggy