From f73fdee1b081928051a5f52d510458f3b81525bd Mon Sep 17 00:00:00 2001 From: Sebastian Wagner Date: Wed, 13 Jan 2021 14:12:24 +0100 Subject: [PATCH] mgr/cephadm: Purge deleted services If no daemon is deployed for a deleted service, purge it. Signed-off-by: Sebastian Wagner --- src/pybind/mgr/cephadm/module.py | 3 --- src/pybind/mgr/cephadm/serve.py | 17 +++++++++++++++++ .../mgr/cephadm/services/cephadmservice.py | 4 ++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py index a838ca04920..d8a42cddb4e 100644 --- a/src/pybind/mgr/cephadm/module.py +++ b/src/pybind/mgr/cephadm/module.py @@ -1696,9 +1696,6 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule, found = self.spec_store.rm(service_name) if found: self._kick_serve_loop() - service = self.cephadm_services.get(service_name, None) - if service: - service.purge() return 'Removed service %s' % service_name else: # must be idempotent: still a success. diff --git a/src/pybind/mgr/cephadm/serve.py b/src/pybind/mgr/cephadm/serve.py index 8002a268a32..d39038f5c43 100644 --- a/src/pybind/mgr/cephadm/serve.py +++ b/src/pybind/mgr/cephadm/serve.py @@ -85,6 +85,8 @@ class CephadmServe: self._check_daemons() + self._purge_deleted_services() + if self.mgr.upgrade.continue_upgrade(): continue @@ -686,6 +688,21 @@ class CephadmServe: self.mgr._get_cephadm_service(daemon_type_to_service( daemon_type)).daemon_check_post(daemon_descs) + def _purge_deleted_services(self) -> None: + existing_services = self.mgr.spec_store.all_specs.items() + for service_name, spec in list(existing_services): + if service_name not in self.mgr.spec_store.spec_deleted: + continue + if self.mgr.cache.get_daemons_by_service(service_name): + continue + if spec.service_type in ['mon', 'mgr']: + continue + + logger.info(f'Purge service {service_name}') + + self.mgr.cephadm_services[spec.service_type].purge(service_name) + self.mgr.spec_store.finally_rm(service_name) + def convert_tags_to_repo_digest(self) -> None: if not self.mgr.use_repo_digest: return diff --git a/src/pybind/mgr/cephadm/services/cephadmservice.py b/src/pybind/mgr/cephadm/services/cephadmservice.py index d9a241a5f04..89b7d0aacff 100644 --- a/src/pybind/mgr/cephadm/services/cephadmservice.py +++ b/src/pybind/mgr/cephadm/services/cephadmservice.py @@ -280,7 +280,7 @@ class CephadmService(metaclass=ABCMeta): assert self.TYPE == daemon_type_to_service(daemon.daemon_type) logger.debug(f'Post remove daemon {self.TYPE}.{daemon.daemon_id}') - def purge(self) -> None: + def purge(self, service_name: str) -> None: """Called to carry out any purge tasks following service removal""" logger.debug(f'Purge called for {self.TYPE} - no action taken') @@ -974,6 +974,6 @@ class CephadmExporter(CephadmService): } return config, deps - def purge(self) -> None: + def purge(self, service_name: str) -> None: logger.info("Purging cephadm-exporter settings from mon K/V store") self.mgr._clear_exporter_config_settings() -- 2.39.5