From 1f9502a183627967236909de0e9f082c3a7934c2 Mon Sep 17 00:00:00 2001 From: Leonid Usov Date: Thu, 25 Apr 2024 19:41:57 +0300 Subject: [PATCH] squid: qa/tasks/cephfs: don't create a new CephManager if there is one in the context Signed-off-by: Leonid Usov (cherry picked from commit 329edd3c56baff81cb76c5008ac2eaf7c110f9e1) Fixes: https://tracker.ceph.com/issues/66103 --- qa/tasks/cephfs/filesystem.py | 19 ++++++++++++------- qa/tasks/vstart_runner.py | 21 ++++++++++----------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/qa/tasks/cephfs/filesystem.py b/qa/tasks/cephfs/filesystem.py index 176a5aad98aa9..cef55277b5055 100644 --- a/qa/tasks/cephfs/filesystem.py +++ b/qa/tasks/cephfs/filesystem.py @@ -233,10 +233,15 @@ class CephClusterBase(RunCephCmd): (result,) = self._ctx.cluster.only(first_mon).remotes.keys() return result - def __init__(self, ctx) -> None: + def __init__(self, ctx, cluster_name='ceph') -> None: self._ctx = ctx - self.mon_manager = CephManager(self.admin_remote, ctx=ctx, - logger=log.getChild('ceph_manager')) + try: + manager = ctx.managers[cluster_name] + except Exception as e: + log.warn(f"Couldn't get a manager for cluster {cluster_name} from the context; exception: {e}") + manager = CephManager(self.admin_remote, ctx=ctx, + logger=log.getChild('ceph_manager')) + self.mon_manager = manager def get_config(self, key, service_type=None): """ @@ -308,8 +313,8 @@ class MDSClusterBase(CephClusterBase): as a separate instance outside of your (multiple) Filesystem instances. """ - def __init__(self, ctx): - super(MDSClusterBase, self).__init__(ctx) + def __init__(self, ctx, cluster_name='ceph'): + super(MDSClusterBase, self).__init__(ctx, cluster_name=cluster_name) @property def mds_ids(self): @@ -530,8 +535,8 @@ class FilesystemBase(MDSClusterBase): This object is for driving a CephFS filesystem. The MDS daemons driven by MDSCluster may be shared with other Filesystems. """ - def __init__(self, ctx, fs_config={}, fscid=None, name=None, create=False): - super(FilesystemBase, self).__init__(ctx) + def __init__(self, ctx, fs_config={}, fscid=None, name=None, create=False, cluster_name='ceph'): + super(FilesystemBase, self).__init__(ctx, cluster_name=cluster_name) self.name = name self.id = None diff --git a/qa/tasks/vstart_runner.py b/qa/tasks/vstart_runner.py index fe3ccd8fc6d61..4d32e9de5303f 100644 --- a/qa/tasks/vstart_runner.py +++ b/qa/tasks/vstart_runner.py @@ -783,10 +783,9 @@ tasks.cephfs.fuse_mount.FuseMount = LocalFuseMount # XXX: this class has nothing to do with the Ceph daemon (ceph-mgr) of # the same name. class LocalCephManager(CephManager): - def __init__(self, ctx=None): + def __init__(self, ctx=None, cluster_name=None): self.ctx = ctx - if self.ctx: - self.cluster = self.ctx.config['cluster'] + self.cluster = cluster_name # Deliberately skip parent init, only inheriting from it to get # util methods like osd_dump that sit on top of raw_cluster_cmd @@ -832,10 +831,10 @@ class LocalCephManager(CephManager): class LocalCephCluster(tasks.cephfs.filesystem.CephClusterBase): - def __init__(self, ctx): + def __init__(self, ctx, cluster_name='ceph'): # Deliberately skip calling CephCluster constructor self._ctx = ctx - self.mon_manager = LocalCephManager(ctx=self._ctx) + self.mon_manager = LocalCephManager(ctx=self._ctx, cluster_name=cluster_name) self._conf = defaultdict(dict) @property @@ -904,8 +903,8 @@ class LocalCephCluster(tasks.cephfs.filesystem.CephClusterBase): tasks.cephfs.filesystem.CephCluster = LocalCephCluster class LocalMDSCluster(LocalCephCluster, tasks.cephfs.filesystem.MDSClusterBase): - def __init__(self, ctx): - LocalCephCluster.__init__(self, ctx) + def __init__(self, ctx, cluster_name='ceph'): + LocalCephCluster.__init__(self, ctx, cluster_name=cluster_name) # Deliberately skip calling MDSCluster constructor self._mds_ids = ctx.daemons.daemons['ceph.mds'].keys() log.debug("Discovered MDS IDs: {0}".format(self._mds_ids)) @@ -945,9 +944,9 @@ class LocalMgrCluster(LocalCephCluster, tasks.mgr.mgr_test_case.MgrClusterBase): tasks.mgr.mgr_test_case.MgrCluster = LocalMgrCluster class LocalFilesystem(LocalMDSCluster, tasks.cephfs.filesystem.FilesystemBase): - def __init__(self, ctx, fs_config={}, fscid=None, name=None, create=False): + def __init__(self, ctx, fs_config={}, fscid=None, name=None, create=False, cluster_name='ceph'): # Deliberately skip calling Filesystem constructor - LocalMDSCluster.__init__(self, ctx) + LocalMDSCluster.__init__(self, ctx, cluster_name=cluster_name) self.id = None self.name = name @@ -958,7 +957,7 @@ class LocalFilesystem(LocalMDSCluster, tasks.cephfs.filesystem.FilesystemBase): self.fs_config = fs_config self.ec_profile = fs_config.get('ec_profile') - self.mon_manager = LocalCephManager(ctx=self._ctx) + self.mon_manager = LocalCephManager(ctx=self._ctx, cluster_name=cluster_name) self.client_remote = LocalRemote() @@ -1025,7 +1024,7 @@ class LocalContext(object): self.summary = get_summary("vstart_runner", None) if not hasattr(self, 'managers'): self.managers = {} - self.managers[self.config['cluster']] = LocalCephManager(ctx=self) + self.managers[cluster_name] = LocalCephManager(ctx=self, cluster_name=cluster_name) # Shove some LocalDaemons into the ctx.daemons DaemonGroup instance so that any # tests that want to look these up via ctx can do so. -- 2.39.5