From 43d1b8e174af333514d2b23d0a1be9ec3895fd25 Mon Sep 17 00:00:00 2001 From: Venky Shankar Date: Wed, 22 Aug 2018 11:06:25 -0400 Subject: [PATCH] test: add test for mds drop cache command Fixes: http://tracker.ceph.com/issues/23362 Signed-off-by: Venky Shankar --- qa/tasks/cephfs/test_misc.py | 71 ++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/qa/tasks/cephfs/test_misc.py b/qa/tasks/cephfs/test_misc.py index b14c86ec970a9..0700cc1adc2b5 100644 --- a/qa/tasks/cephfs/test_misc.py +++ b/qa/tasks/cephfs/test_misc.py @@ -207,3 +207,74 @@ class TestMisc(CephFSTestCase): info = self.fs.mds_asok(['dump', 'inode', '1']) assert(info['path'] == "/") + def _run_drop_cache_cmd(self, timeout, use_tell): + 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)]) + return drop_res + + def _drop_cache_command(self, timeout, use_tell=True): + self.mount_b.umount_wait() + ls_data = self.fs.mds_asok(['session', 'ls']) + self.assert_session_count(1, ls_data) + + # 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) + + 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): + self.mount_b.umount_wait() + ls_data = self.fs.mds_asok(['session', 'ls']) + self.assert_session_count(1, ls_data) + + # create some files + self.mount_a.create_n_files("dc-dir/dc-file-t", 1000) + + # simulate client death and try drop cache + self.mount_a.kill() + drop_res = self._run_drop_cache_cmd(timeout, use_tell) + + self.assertTrue(drop_res['client_recall']['return_code'] == -errno.ETIMEDOUT) + self.assertTrue(drop_res['flush_journal']['return_code'] == 0) + + self.mount_a.kill_cleanup() + 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): + """ + 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): + """ + Check drop cache command with non-responding client using tell + interface. Note that the cache size post trimming is not checked + here. + """ + self._drop_cache_command_timeout(5) -- 2.39.5