From: Patrick Donnelly Date: Tue, 28 Feb 2023 19:30:35 +0000 (-0500) Subject: qa: add test case for libcephsqlite maybe_reconnect X-Git-Tag: v18.2.1~112^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=72cddc2c1d5175015b6723fdfeb0bfa364f8ffdd;p=ceph.git qa: add test case for libcephsqlite maybe_reconnect Signed-off-by: Patrick Donnelly (cherry picked from commit c010e8abfe723576b5808a33339a2c25b4336f7f) --- diff --git a/qa/tasks/mgr/mgr_test_case.py b/qa/tasks/mgr/mgr_test_case.py index 5fe5e0759856..94a230c8d13b 100644 --- a/qa/tasks/mgr/mgr_test_case.py +++ b/qa/tasks/mgr/mgr_test_case.py @@ -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"] diff --git a/qa/tasks/mgr/test_failover.py b/qa/tasks/mgr/test_failover.py index a4e840883f90..bfff11262c45 100644 --- a/qa/tasks/mgr/test_failover.py +++ b/qa/tasks/mgr/test_failover.py @@ -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 + )