]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
qa: add _check_scrub_status helper to simplify the code 40108/head
authorXiubo Li <xiubli@redhat.com>
Thu, 31 Dec 2020 02:25:20 +0000 (10:25 +0800)
committerXiubo Li <xiubli@redhat.com>
Mon, 15 Mar 2021 05:23:29 +0000 (13:23 +0800)
Signed-off-by: Xiubo Li <xiubli@redhat.com>
(cherry picked from commit d3889cabc55b563fc5a4b9d2c68db085243d2348)

qa/tasks/cephfs/filesystem.py
qa/tasks/cephfs/test_multimds_misc.py

index 7d52518310c8285b26cc8349d4a9c141cad39cfb..1afac15be883bc2a124b6de195e286151799b068 100644 (file)
@@ -1583,7 +1583,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"
@@ -1591,9 +1592,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]
index 921a1ffa256fcbb60ccda6556964da998707a7b8..2d3a2ef56358d754a2cba3d55e0c80e60f76c002 100644 (file)
@@ -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)