]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: add trim_completed_request_list() helper
authorXiubo Li <xiubli@redhat.com>
Tue, 31 Oct 2023 02:30:18 +0000 (10:30 +0800)
committerXiubo Li <xiubli@redhat.com>
Wed, 27 Mar 2024 04:19:57 +0000 (12:19 +0800)
Fixes: https://tracker.ceph.com/issues/63364
Signed-off-by: Xiubo Li <xiubli@redhat.com>
(cherry picked from commit 188aed9d779a168d999be9f652bcceecbfd64f05)

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

index 1b75249566332b868e969170b67a5f962fd7b305..27891d0c09373e0013f5757e642a68c88956d37b 100644 (file)
@@ -2452,6 +2452,35 @@ void Server::set_trace_dist(const ref_t<MClientReply> &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<MClientRequest> &req)
 {
   dout(4) << "handle_client_request " << *req << dendl;
@@ -2533,31 +2562,7 @@ void Server::handle_client_request(const cref_t<MClientRequest> &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);
index 6b2f9c188f5aca4f41275411c006e49703a06673..4715a0880c8387ddf70738c41ddf30fe8e5af819 100644 (file)
@@ -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<MClientRequest> &m);
   void handle_client_reply(const cref_t<MClientReply> &m);