From c06b95cc6a8e15053ddfc85892e3aa9ef9018a9c Mon Sep 17 00:00:00 2001 From: Adam King Date: Fri, 20 Jan 2023 17:14:23 -0500 Subject: [PATCH] mgr/cephadm: call iscsi post_remove from server loop If we call it directly during a synchronous command from the command line it never returns. Fixes: https://tracker.ceph.com/issues/58531 Signed-off-by: Adam King (cherry picked from commit ea38245ace58789216646262f2078a315f1d2fd5) --- src/pybind/mgr/cephadm/module.py | 2 ++ src/pybind/mgr/cephadm/serve.py | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py index 9fc4298a868a..f3d80749c7fb 100644 --- a/src/pybind/mgr/cephadm/module.py +++ b/src/pybind/mgr/cephadm/module.py @@ -496,6 +496,8 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule, self.osd_service: OSDService = cast(OSDService, self.cephadm_services['osd']) self.iscsi_service: IscsiService = cast(IscsiService, self.cephadm_services['iscsi']) + self.scheduled_async_actions: List[Callable] = [] + self.template = TemplateMgr(self) self.requires_post_actions: Set[str] = set() diff --git a/src/pybind/mgr/cephadm/serve.py b/src/pybind/mgr/cephadm/serve.py index 7ac6fee88e2c..a0f86ed415ad 100644 --- a/src/pybind/mgr/cephadm/serve.py +++ b/src/pybind/mgr/cephadm/serve.py @@ -90,6 +90,8 @@ class CephadmServe: self.mgr.remote('dashboard', 'set_rgw_credentials') if not self.mgr.paused: + self._run_async_actions() + self.mgr.to_remove_osds.process_removal_queue() self.mgr.migration.migrate() @@ -417,6 +419,10 @@ class CephadmServe: # Unset global 'pending' flag for host self.mgr.cache.loading_osdspec_preview.remove(search_host) + def _run_async_actions(self) -> None: + while self.mgr.scheduled_async_actions: + (self.mgr.scheduled_async_actions.pop(0))() + def _check_for_strays(self) -> None: self.log.debug('_check_for_strays') for k in ['CEPHADM_STRAY_HOST', @@ -1207,8 +1213,13 @@ class CephadmServe: self.mgr.cache.invalidate_host_daemons(host) if not no_post_remove: - self.mgr.cephadm_services[daemon_type_to_service( - daemon_type)].post_remove(daemon, is_failed_deploy=False) + if daemon_type not in ['iscsi']: + self.mgr.cephadm_services[daemon_type_to_service( + daemon_type)].post_remove(daemon, is_failed_deploy=False) + else: + self.mgr.scheduled_async_actions.append(lambda: self.mgr.cephadm_services[daemon_type_to_service( + daemon_type)].post_remove(daemon, is_failed_deploy=False)) + self.mgr._kick_serve_loop() return "Removed {} from host '{}'".format(name, host) -- 2.47.3