From: Adam King Date: Fri, 20 Jan 2023 22:14:23 +0000 (-0500) Subject: mgr/cephadm: call iscsi post_remove from server loop X-Git-Tag: v16.2.13~200^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c06b95cc6a8e15053ddfc85892e3aa9ef9018a9c;p=ceph.git 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) --- 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)