]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: require filter for client/session evict command
authorneeraj pratap singh <neerajpratapsingh@li-ff7f0d4c-3462-11b2-a85c-d4004c0fa1a0.ibm.com>
Tue, 7 Nov 2023 10:44:54 +0000 (16:14 +0530)
committerneeraj pratap singh <neerajpratapsingh@li-ff7f0d4c-3462-11b2-a85c-d4004c0fa1a0.ibm.com>
Wed, 24 Jul 2024 04:00:45 +0000 (09:30 +0530)
This commit fixes the issues in client/session evict command
using below solutions:
(1) client evict without filter is forbidden
(2) SessionFilter::parse is modified to support id=* (id=0 is not allowed)
(3) Invalid id error is handled
User can use client evict id=* to evict all clients.

Fixes: https://tracker.ceph.com/issues/58619
Signed-off-by: Neeraj Pratap Singh <neesingh@redhat.com>
(cherry picked from commit 0ef5941a2e79feeae79a705080b57d410fa38136)

src/mds/MDSDaemon.cc
src/mds/MDSRank.cc
src/mds/SessionMap.cc

index 206daf9d5d8b33dcf341216e979c3209fb227cdb..b3a68e36b08442de3ef964852a470dd8ff45c0a2 100644 (file)
@@ -408,11 +408,11 @@ void MDSDaemon::set_up_admin_socket()
                                     asok_hook,
                                     "List client sessions based on a filter");
   ceph_assert(r == 0);
-  r = admin_socket->register_command("session evict name=filters,type=CephString,n=N,req=false",
+  r = admin_socket->register_command("session evict name=filters,type=CephString,n=N,req=true",
                                     asok_hook,
                                     "Evict client session(s) based on a filter");
   ceph_assert(r == 0);
-  r = admin_socket->register_command("client evict name=filters,type=CephString,n=N,req=false",
+  r = admin_socket->register_command("client evict name=filters,type=CephString,n=N,req=true",
                                     asok_hook,
                                     "Evict client session(s) based on a filter");
   ceph_assert(r == 0);
index 80da7e7cd65c8dbfd349ec3e6cc0efb8b04fd148..c766e9ef1f982aa5ed29c0bfc44af68607d1f425 100644 (file)
@@ -3135,7 +3135,7 @@ void MDSRankDispatcher::evict_clients(
   dout(20) << __func__ << " matched " << victims.size() << " sessions" << dendl;
 
   if (victims.empty()) {
-    on_finish(0, {}, outbl);
+    on_finish(-ESRCH, "no hosts match", outbl);
     return;
   }
 
index 9bec67c245d61e7cb7c7d97b5ec029c9ea309529..48242f513b3999317dc61f2728c23bb113b8d829 100644 (file)
@@ -1217,6 +1217,13 @@ int SessionFilter::parse(
       state = v;
     } else if (k == "id") {
       std::string err;
+      if (v == "*") {
+        // evict all clients , by default id set to 0
+        return 0;
+      } else if (v == "0") {
+        *ss << "Invalid value";
+        return -CEPHFS_EINVAL;
+      }
       id = strict_strtoll(v.c_str(), 10, &err);
       if (!err.empty()) {
         *ss << err;