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: v14.0.1~661^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F22999%2Fhead;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" --- diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 4f056de089528..fcf5452c2dea7 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -1075,6 +1075,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 dd6fba923deac..f2ab258a4fe21 100644 --- a/src/mds/MDSRank.h +++ b/src/mds/MDSRank.h @@ -367,6 +367,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 f7a9fe7b6dbb6..722ce887011d4 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -756,7 +756,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); @@ -778,6 +781,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