]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test: extend scrub control test to validate mds task status
authorVenky Shankar <vshankar@redhat.com>
Wed, 24 Jul 2019 11:00:16 +0000 (07:00 -0400)
committerVenky Shankar <vshankar@redhat.com>
Thu, 26 Mar 2020 02:44:12 +0000 (22:44 -0400)
Signed-off-by: Venky Shankar <vshankar@redhat.com>
(cherry picked from commit 465a3adc6c31fd9b8359920ab47adf8e1f45d5f1)

qa/tasks/ceph_manager.py
qa/tasks/cephfs/filesystem.py
qa/tasks/cephfs/test_scrub_checks.py

index ae3bc56b4ecc4053d831f09230e0c484c7fd8d05..2d9a1c95369cf268e9f38f1d5dfc341feda5ae5e 100644 (file)
@@ -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):
     """
index f91e6ff919e4e0b55cfc1df5cf7b4bfd3cbc918a..204f64523ba7013d98fc780815222df232b5a668 100644 (file)
@@ -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:
index 4fae23deee73201ad99c143d063d917b0e97ff96..d6947805347dac92a7f5fa8888e5dc3a23596089 100644 (file)
@@ -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