From: Venky Shankar Date: Wed, 24 Jul 2019 11:00:16 +0000 (-0400) Subject: test: extend scrub control test to validate mds task status X-Git-Tag: v14.2.10~168^2~16 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=17fbdc90a480bb659363f231c0b8ce280f4eb4e1;p=ceph.git test: extend scrub control test to validate mds task status Signed-off-by: Venky Shankar (cherry picked from commit 465a3adc6c31fd9b8359920ab47adf8e1f45d5f1) --- diff --git a/qa/tasks/ceph_manager.py b/qa/tasks/ceph_manager.py index ae3bc56b4ecc..2d9a1c95369c 100644 --- a/qa/tasks/ceph_manager.py +++ b/qa/tasks/ceph_manager.py @@ -2587,6 +2587,24 @@ class CephManager: remote.run(args=['sudo', 'install', '-d', '-m0777', '--', '/var/run/ceph', ], ) + def get_service_task_status(self, service, status_key): + """ + Return daemon task status for a given ceph service. + + :param service: ceph service (mds, osd, etc...) + :param status_key: matching task status key + """ + task_status = {} + status = self.raw_cluster_status() + try: + for k,v in status['servicemap']['services'][service]['daemons'].items(): + ts = dict(v).get('task_status', None) + if ts: + task_status[k] = ts[status_key] + except KeyError: # catches missing service and status key + return {} + self.log(task_status) + return task_status def utility_task(name): """ diff --git a/qa/tasks/cephfs/filesystem.py b/qa/tasks/cephfs/filesystem.py index f91e6ff919e4..204f64523ba7 100644 --- a/qa/tasks/cephfs/filesystem.py +++ b/qa/tasks/cephfs/filesystem.py @@ -432,6 +432,9 @@ class Filesystem(MDSCluster): if not hasattr(self._ctx, "filesystem"): self._ctx.filesystem = self + def get_task_status(self, status_key): + return self.mon_manager.get_service_task_status("mds", status_key) + def getinfo(self, refresh = False): status = self.status() if self.id is not None: diff --git a/qa/tasks/cephfs/test_scrub_checks.py b/qa/tasks/cephfs/test_scrub_checks.py index 4fae23deee73..d6947805347d 100644 --- a/qa/tasks/cephfs/test_scrub_checks.py +++ b/qa/tasks/cephfs/test_scrub_checks.py @@ -30,6 +30,9 @@ class TestScrubControls(CephFSTestCase): self.assertEqual(res['return_code'], expected) def _get_scrub_status(self): return self.fs.rank_tell(["scrub", "status"]) + def _check_task_status(self, expected_status): + task_status = self.fs.get_task_status("scrub status") + self.assertTrue(task_status['0'].startswith(expected_status)) def test_scrub_abort(self): test_dir = "scrub_control_test_path" @@ -50,6 +53,10 @@ class TestScrubControls(CephFSTestCase): out_json = self._get_scrub_status() self.assertTrue("no active" in out_json['status']) + # sleep enough to fetch updated task status + time.sleep(10) + self._check_task_status("idle") + def test_scrub_pause_and_resume(self): test_dir = "scrub_control_test_path" abs_test_path = "/{0}".format(test_dir) @@ -69,6 +76,10 @@ class TestScrubControls(CephFSTestCase): out_json = self._get_scrub_status() self.assertTrue("PAUSED" in out_json['status']) + # sleep enough to fetch updated task status + time.sleep(10) + self._check_task_status("paused") + # resume and verify self._resume_scrub(0) out_json = self._get_scrub_status() @@ -93,17 +104,29 @@ class TestScrubControls(CephFSTestCase): out_json = self._get_scrub_status() self.assertTrue("PAUSED" in out_json['status']) + # sleep enough to fetch updated task status + time.sleep(10) + self._check_task_status("paused") + # abort and verify self._abort_scrub(0) out_json = self._get_scrub_status() self.assertTrue("PAUSED" in out_json['status']) self.assertTrue("0 inodes" in out_json['status']) + # sleep enough to fetch updated task status + time.sleep(10) + self._check_task_status("paused") + # resume and verify self._resume_scrub(0) out_json = self._get_scrub_status() self.assertTrue("no active" in out_json['status']) + # sleep enough to fetch updated task status + time.sleep(10) + self._check_task_status("idle") + class TestScrubChecks(CephFSTestCase): """ Run flush and scrub commands on the specified files in the filesystem. This