From: neeraj pratap singh Date: Tue, 7 Nov 2023 10:44:54 +0000 (+0530) Subject: mds: require filter for client/session evict command X-Git-Tag: v19.2.1~319^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ef712ceecd018fc3d407b5f9a4f4ffd537c657f6;p=ceph.git mds: require filter for client/session evict command 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 (cherry picked from commit 0ef5941a2e79feeae79a705080b57d410fa38136) --- diff --git a/src/mds/MDSDaemon.cc b/src/mds/MDSDaemon.cc index 206daf9d5d8b3..b3a68e36b0844 100644 --- a/src/mds/MDSDaemon.cc +++ b/src/mds/MDSDaemon.cc @@ -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); diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 80da7e7cd65c8..c766e9ef1f982 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -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; } diff --git a/src/mds/SessionMap.cc b/src/mds/SessionMap.cc index 9bec67c245d61..48242f513b399 100644 --- a/src/mds/SessionMap.cc +++ b/src/mds/SessionMap.cc @@ -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;