From: Xiubo Li Date: Thu, 31 Dec 2020 02:25:20 +0000 (+0800) Subject: qa: add _check_scrub_status helper to simplify the code X-Git-Tag: v17.1.0~2738^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d3889cabc55b563fc5a4b9d2c68db085243d2348;p=ceph.git qa: add _check_scrub_status helper to simplify the code Signed-off-by: Xiubo Li --- diff --git a/qa/tasks/cephfs/filesystem.py b/qa/tasks/cephfs/filesystem.py index fb407ac4506b..87b90baf0b64 100644 --- a/qa/tasks/cephfs/filesystem.py +++ b/qa/tasks/cephfs/filesystem.py @@ -1572,7 +1572,8 @@ class Filesystem(MDSCluster): def get_scrub_status(self, rank=0): return self.run_scrub(["status"], rank) - def wait_until_scrub_complete(self, result=None, tag=None, rank=0, sleep=30, timeout=300): + def wait_until_scrub_complete(self, result=None, tag=None, rank=0, sleep=30, + timeout=300, reverse=False): # time out after "timeout" seconds and assume as done if result is None: result = "no active scrubs running" @@ -1580,9 +1581,14 @@ class Filesystem(MDSCluster): while proceed(): out_json = self.rank_tell(["scrub", "status"], rank=rank) assert out_json is not None - if result in out_json['status']: - log.info("all active scrubs completed") - return True + if not reverse: + if result in out_json['status']: + log.info("all active scrubs completed") + return True + else: + if result not in out_json['status']: + log.info("all active scrubs completed") + return True if tag is not None: status = out_json['scrubs'][tag] diff --git a/qa/tasks/cephfs/test_multimds_misc.py b/qa/tasks/cephfs/test_multimds_misc.py index 921a1ffa256f..2d3a2ef56358 100644 --- a/qa/tasks/cephfs/test_multimds_misc.py +++ b/qa/tasks/cephfs/test_multimds_misc.py @@ -10,6 +10,17 @@ class TestScrub2(CephFSTestCase): MDSS_REQUIRED = 3 CLIENTS_REQUIRED = 1 + def _check_scrub_status(self, result=None, reverse=False): + self.assertEqual(self.fs.wait_until_scrub_complete(result=result, rank=1, + sleep=5, timeout=30, + reverse=reverse), True) + self.assertEqual(self.fs.wait_until_scrub_complete(result=result, rank=2, + sleep=5, timeout=30, + reverse=reverse), True) + self.assertEqual(self.fs.wait_until_scrub_complete(result=result, rank=0, + sleep=5, timeout=30, + reverse=reverse), True) + def _check_task_status_na(self, timo=120): """ check absence of scrub status in ceph status """ with safe_while(sleep=1, tries=120, action='wait for task status') as proceed: @@ -137,9 +148,7 @@ class TestScrub2(CephFSTestCase): # Abort and verify in both mdss. We also check the status in rank 0 mds because # it is supposed to gather the scrub status from other mdss. - self.wait_until_true(lambda: "no active" in self.fs.get_scrub_status(1)['status'] - and "no active" in self.fs.get_scrub_status(2)['status'] - and "no active" in self.fs.get_scrub_status(0)['status'], 30) + self._check_scrub_status() # sleep enough to fetch updated task status checked = self._check_task_status_na() @@ -160,9 +169,7 @@ class TestScrub2(CephFSTestCase): res = self.fs.run_scrub(["pause"]) self.assertEqual(res['return_code'], 0) - self.wait_until_true(lambda: "PAUSED" in self.fs.get_scrub_status(1)['status'] - and "PAUSED" in self.fs.get_scrub_status(2)['status'] - and "PAUSED" in self.fs.get_scrub_status(0)['status'], 30) + self._check_scrub_status(result="PAUSED") checked = self._check_task_status("paused") self.assertTrue(checked) @@ -171,9 +178,7 @@ class TestScrub2(CephFSTestCase): res = self.fs.run_scrub(["resume"]) self.assertEqual(res['return_code'], 0) - self.wait_until_true(lambda: not("PAUSED" in self.fs.get_scrub_status(1)['status']) - and not("PAUSED" in self.fs.get_scrub_status(2)['status']) - and not("PAUSED" in self.fs.get_scrub_status(0)['status']), 30) + self._check_scrub_status(result="PAUSED", reverse=True) checked = self._check_task_status_na() self.assertTrue(checked) @@ -193,9 +198,7 @@ class TestScrub2(CephFSTestCase): res = self.fs.run_scrub(["pause"]) self.assertEqual(res['return_code'], 0) - self.wait_until_true(lambda: "PAUSED" in self.fs.get_scrub_status(1)['status'] - and "PAUSED" in self.fs.get_scrub_status(2)['status'] - and "PAUSED" in self.fs.get_scrub_status(0)['status'], 30) + self._check_scrub_status(result="PAUSED") checked = self._check_task_status("paused") self.assertTrue(checked) @@ -203,12 +206,8 @@ class TestScrub2(CephFSTestCase): res = self.fs.run_scrub(["abort"]) self.assertEqual(res['return_code'], 0) - self.wait_until_true(lambda: "PAUSED" in self.fs.get_scrub_status(1)['status'] - and "0 inodes" in self.fs.get_scrub_status(1)['status'] - and "PAUSED" in self.fs.get_scrub_status(2)['status'] - and "0 inodes" in self.fs.get_scrub_status(2)['status'] - and "PAUSED" in self.fs.get_scrub_status(0)['status'] - and "0 inodes" in self.fs.get_scrub_status(0)['status'], 30) + self._check_scrub_status(result="PAUSED") + self._check_scrub_status(result="0 inodes") # scrub status should still be paused... checked = self._check_task_status("paused") @@ -218,9 +217,7 @@ class TestScrub2(CephFSTestCase): res = self.fs.run_scrub(["resume"]) self.assertEqual(res['return_code'], 0) - self.wait_until_true(lambda: not("PAUSED" in self.fs.get_scrub_status(1)['status']) - and not("PAUSED" in self.fs.get_scrub_status(2)['status']) - and not("PAUSED" in self.fs.get_scrub_status(0)['status']), 30) + self._check_scrub_status(result="PAUSED", reverse=True) checked = self._check_task_status_na() self.assertTrue(checked)