From: Yan, Zheng Date: Thu, 12 Jul 2018 02:52:57 +0000 (+0800) Subject: mds: consider max age of dispatch queue when finding stale client X-Git-Tag: v13.2.3~114^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=438bf49e0213b072cbfd2d1c36b81f849617b467;p=ceph.git mds: consider max age of dispatch queue when finding stale client session renew messages from clients can be in the dispatch queue, waiting for getting dispatched. Signed-off-by: "Yan, Zheng" (cherry picked from commit 2ca5708df6cdb4732e7ced3dcf37c966a09aa4d2) --- diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 521d4f54042..ef4a0e6557c 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -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; diff --git a/src/mds/MDSRank.h b/src/mds/MDSRank.h index 2199908cbc3..87337090dc6 100644 --- a/src/mds/MDSRank.h +++ b/src/mds/MDSRank.h @@ -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); diff --git a/src/mds/Server.cc b/src/mds/Server.cc index ceabf8f9b44..2fbc4b3d31b 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -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