From: Xiubo Li Date: Tue, 31 Oct 2023 02:30:18 +0000 (+0800) Subject: mds: add trim_completed_request_list() helper X-Git-Tag: v18.2.4~114^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ee49b4644aaab9a14c0f420e25f614c99734582c;p=ceph.git mds: add trim_completed_request_list() helper Fixes: https://tracker.ceph.com/issues/63364 Signed-off-by: Xiubo Li (cherry picked from commit 188aed9d779a168d999be9f652bcceecbfd64f05) --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 1b7524956633..27891d0c0937 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -2452,6 +2452,35 @@ void Server::set_trace_dist(const ref_t &reply, reply->set_trace(bl); } +// trim completed_request list +void Server::trim_completed_request_list(ceph_tid_t tid, Session *session) +{ + if (tid == UINT64_MAX || !session) + return; + + dout(15) << " oldest_client_tid=" << tid << dendl; + if (session->trim_completed_requests(tid)) { + // Sessions 'completed_requests' was dirtied, mark it to be + // potentially flushed at segment expiry. + mdlog->get_current_segment()->touched_sessions.insert(session->info.inst.name); + + if (session->get_num_trim_requests_warnings() > 0 && + session->get_num_completed_requests() * 2 < g_conf()->mds_max_completed_requests) + session->reset_num_trim_requests_warnings(); + } else { + if (session->get_num_completed_requests() >= + (g_conf()->mds_max_completed_requests << session->get_num_trim_requests_warnings())) { + session->inc_num_trim_requests_warnings(); + CachedStackStringStream css; + *css << "client." << session->get_client() << " does not advance its oldest_client_tid (" + << tid << "), " << session->get_num_completed_requests() + << " completed requests recorded in session\n"; + mds->clog->warn() << css->strv(); + dout(20) << __func__ << " " << css->strv() << dendl; + } + } +} + void Server::handle_client_request(const cref_t &req) { dout(4) << "handle_client_request " << *req << dendl; @@ -2533,31 +2562,7 @@ void Server::handle_client_request(const cref_t &req) } // trim completed_request list - if (req->get_oldest_client_tid() > 0) { - dout(15) << " oldest_client_tid=" << req->get_oldest_client_tid() << dendl; - ceph_assert(session); - if (session->trim_completed_requests(req->get_oldest_client_tid())) { - // Sessions 'completed_requests' was dirtied, mark it to be - // potentially flushed at segment expiry. - mdlog->get_current_segment()->touched_sessions.insert(session->info.inst.name); - - if (session->get_num_trim_requests_warnings() > 0 && - session->get_num_completed_requests() * 2 < g_conf()->mds_max_completed_requests) - session->reset_num_trim_requests_warnings(); - } else { - if (session->get_num_completed_requests() >= - (g_conf()->mds_max_completed_requests << session->get_num_trim_requests_warnings())) { - session->inc_num_trim_requests_warnings(); - CachedStackStringStream css; - *css << "client." << session->get_client() << " does not advance its oldest_client_tid (" - << req->get_oldest_client_tid() << "), " - << session->get_num_completed_requests() - << " completed requests recorded in session\n"; - mds->clog->warn() << css->strv(); - dout(20) << __func__ << " " << css->strv() << dendl; - } - } - } + trim_completed_request_list(req->get_oldest_client_tid(), session); // register + dispatch MDRequestRef mdr = mdcache->request_start(req); diff --git a/src/mds/Server.h b/src/mds/Server.h index 6b2f9c188f5a..4715a0880c83 100644 --- a/src/mds/Server.h +++ b/src/mds/Server.h @@ -158,6 +158,7 @@ public: void force_clients_readonly(); // -- requests -- + void trim_completed_request_list(ceph_tid_t tid, Session *session); void handle_client_request(const cref_t &m); void handle_client_reply(const cref_t &m);