mds: remove cache drop asok command

`cache drop` is a long running command that will block the asok interface
(while the tell version does not). Attempting to abort the command with ^C or
equivalents will simply cause the `ceph` command to exit but won't stop the
asok command handler from waiting for the cache drop operation to complete.

Instead, just allow the tell version.

Fixes: http://tracker.ceph.com/issues/38020
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
This commit is contained in:
Patrick Donnelly 2019-01-22 18:26:38 -08:00
parent d4c4082cca
commit 7fa1e3c37f
No known key found for this signature in database
GPG Key ID: 3A2A7E25BEA8AADB
4 changed files with 13 additions and 45 deletions

View File

@ -264,6 +264,8 @@
system. This is a single command that unsets the joinable flag on the file
system and brings down all of its ranks.
* The `cache drop` admin socket command has been removed. The `ceph tell mds.X
cache drop` remains.
Upgrading from Luminous
-----------------------

View File

@ -225,18 +225,15 @@ class TestMisc(CephFSTestCase):
info = self.fs.mds_asok(['dump', 'inode', hex(ino)])
assert info['path'] == "/foo"
def _run_drop_cache_cmd(self, timeout, use_tell):
def _run_drop_cache_cmd(self, timeout):
drop_res = None
if use_tell:
mds_id = self.fs.get_lone_mds_id()
drop_res = json.loads(
self.fs.mon_manager.raw_cluster_cmd("tell", "mds.{0}".format(mds_id),
"cache", "drop", str(timeout)))
else:
drop_res = self.fs.mds_asok(["cache", "drop", str(timeout)])
mds_id = self.fs.get_lone_mds_id()
drop_res = json.loads(
self.fs.mon_manager.raw_cluster_cmd("tell", "mds.{0}".format(mds_id),
"cache", "drop", str(timeout)))
return drop_res
def _drop_cache_command(self, timeout, use_tell=True):
def _drop_cache_command(self, timeout):
self.mount_b.umount_wait()
ls_data = self.fs.mds_asok(['session', 'ls'])
self.assert_session_count(1, ls_data)
@ -244,12 +241,12 @@ class TestMisc(CephFSTestCase):
# create some files
self.mount_a.create_n_files("dc-dir/dc-file", 1000)
# drop cache
drop_res = self._run_drop_cache_cmd(timeout, use_tell)
drop_res = self._run_drop_cache_cmd(timeout)
self.assertTrue(drop_res['client_recall']['return_code'] == 0)
self.assertTrue(drop_res['flush_journal']['return_code'] == 0)
def _drop_cache_command_timeout(self, timeout, use_tell=True):
def _drop_cache_command_timeout(self, timeout):
self.mount_b.umount_wait()
ls_data = self.fs.mds_asok(['session', 'ls'])
self.assert_session_count(1, ls_data)
@ -259,7 +256,7 @@ class TestMisc(CephFSTestCase):
# simulate client death and try drop cache
self.mount_a.kill()
drop_res = self._run_drop_cache_cmd(timeout, use_tell)
drop_res = self._run_drop_cache_cmd(timeout)
self.assertTrue(drop_res['client_recall']['return_code'] == -errno.ETIMEDOUT)
self.assertTrue(drop_res['flush_journal']['return_code'] == 0)
@ -268,28 +265,14 @@ class TestMisc(CephFSTestCase):
self.mount_a.mount()
self.mount_a.wait_until_mounted()
def test_drop_cache_command_asok(self):
"""
Basic test for checking drop cache command using admin socket.
Note that the cache size post trimming is not checked here.
"""
self._drop_cache_command(10, use_tell=False)
def test_drop_cache_command_tell(self):
def test_drop_cache_command(self):
"""
Basic test for checking drop cache command using tell interface.
Note that the cache size post trimming is not checked here.
"""
self._drop_cache_command(10)
def test_drop_cache_command_timeout_asok(self):
"""
Check drop cache command with non-responding client using admin
socket. Note that the cache size post trimming is not checked here.
"""
self._drop_cache_command_timeout(5, use_tell=False)
def test_drop_cache_command_timeout_tell(self):
def test_drop_cache_command_timeout(self):
"""
Check drop cache command with non-responding client using tell
interface. Note that the cache size post trimming is not checked

View File

@ -260,11 +260,6 @@ void MDSDaemon::set_up_admin_socket()
asok_hook,
"show cache status");
ceph_assert(r == 0);
r = admin_socket->register_command("cache drop",
"cache drop name=timeout,type=CephInt,range=0,req=false",
asok_hook,
"drop cache");
ceph_assert(r == 0);
r = admin_socket->register_command("dump tree",
"dump tree "
"name=root,type=CephString,req=true "

View File

@ -2517,18 +2517,6 @@ bool MDSRankDispatcher::handle_asok_command(std::string_view command,
} else if (command == "cache status") {
std::lock_guard l(mds_lock);
mdcache->cache_status(f);
} else if (command == "cache drop") {
int64_t timeout;
if (!cmd_getval(g_ceph_context, cmdmap, "timeout", timeout)) {
timeout = 0;
}
C_SaferCond cond;
command_cache_drop((uint64_t)timeout, f, &cond);
int r = cond.wait();
if (r != 0) {
f->flush(ss);
}
} else if (command == "dump tree") {
command_dump_tree(cmdmap, ss, f);
} else if (command == "dump loads") {