]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
qa: add test case for libcephsqlite maybe_reconnect 52460/head
authorPatrick Donnelly <pdonnell@redhat.com>
Tue, 28 Feb 2023 19:30:35 +0000 (14:30 -0500)
committerPatrick Donnelly <pdonnell@redhat.com>
Tue, 15 Aug 2023 12:39:26 +0000 (08:39 -0400)
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
(cherry picked from commit c010e8abfe723576b5808a33339a2c25b4336f7f)

qa/tasks/mgr/mgr_test_case.py
qa/tasks/mgr/test_failover.py

index 5fe5e0759856cb269f309e50a4f271a2b5a4d8cb..94a230c8d13b9956c5af8e6a18cfadeb2ad98cdd 100644 (file)
@@ -39,6 +39,14 @@ class MgrCluster(CephCluster):
         return json.loads(
             self.mon_manager.raw_cluster_cmd("mgr", "dump", "--format=json-pretty"))
 
+    def get_registered_clients(self, name, mgr_map = None):
+        if mgr_map is None:
+            mgr_map = self.get_mgr_map()
+        for c in mgr_map['active_clients']:
+            if c['name'] == name:
+                return c['addrvec']
+        return None
+
     def get_active_id(self):
         return self.get_mgr_map()["active_name"]
 
index a4e840883f90d2a9755f1443a0ce6de05a4da04d..bfff11262c45d8d7ee794070593a42d922796bdc 100644 (file)
@@ -146,3 +146,37 @@ class TestFailover(MgrTestCase):
             timeout=60
         )
         self.assertEqual(self.mgr_cluster.get_active_id(), original_active)
+
+class TestLibCephSQLiteFailover(MgrTestCase):
+    MGRS_REQUIRED = 1
+
+    def setUp(self):
+        super(TestLibCephSQLiteFailover, self).setUp()
+        self.setup_mgrs()
+
+    def get_libcephsqlite(self):
+        mgr_map = self.mgr_cluster.get_mgr_map()
+        addresses = self.mgr_cluster.get_registered_clients('libcephsqlite', mgr_map=mgr_map)
+        self.assertEqual(len(addresses), 1)
+        return addresses[0]
+
+    def test_maybe_reonnect(self):
+        """
+        That the devicehealth module can recover after losing its libcephsqlite lock.
+        """
+
+        # make sure the database is populated and loaded by the module
+        self.mgr_cluster.mon_manager.ceph("device scrape-health-metrics")
+
+        oldaddr = self.get_libcephsqlite()
+        self.mgr_cluster.mon_manager.ceph(f"osd blocklist add {oldaddr['addr']}/{oldaddr['nonce']}")
+
+        def test():
+            self.mgr_cluster.mon_manager.ceph("device scrape-health-metrics")
+            newaddr = self.get_libcephsqlite()
+            return oldaddr != newaddr
+
+        self.wait_until_true(
+            test,
+            timeout=30
+        )