]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: move _remove_daemon to serve.py
authorSebastian Wagner <sebastian.wagner@suse.com>
Tue, 5 Jan 2021 15:25:50 +0000 (16:25 +0100)
committerSebastian Wagner <sebastian.wagner@suse.com>
Mon, 11 Jan 2021 13:56:50 +0000 (14:56 +0100)
`_remove_daemon` can potentially make the CLI unresponsive and should
only be called from the serve() thread.

Signed-off-by: Sebastian Wagner <sebastian.wagner@suse.com>
src/pybind/mgr/cephadm/module.py
src/pybind/mgr/cephadm/serve.py
src/pybind/mgr/cephadm/services/osd.py

index 9cb65d8b3bc8e927b992de134cab6198669d3cc7..37cb9fd2da48350df81ee39119aad996df3096b2 100644 (file)
@@ -2027,34 +2027,7 @@ To check that the host is reachable:
 
     @forall_hosts
     def _remove_daemons(self, name: str, host: str) -> str:
-        return self._remove_daemon(name, host)
-
-    def _remove_daemon(self, name: str, host: str) -> str:
-        """
-        Remove a daemon
-        """
-        (daemon_type, daemon_id) = name.split('.', 1)
-        daemon = orchestrator.DaemonDescription(
-            daemon_type=daemon_type,
-            daemon_id=daemon_id,
-            hostname=host)
-
-        with set_exception_subject('service', daemon.service_id(), overwrite=True):
-
-            self.cephadm_services[daemon_type_to_service(daemon_type)].pre_remove(daemon)
-
-            args = ['--name', name, '--force']
-            self.log.info('Removing daemon %s from %s' % (name, host))
-            out, err, code = self._run_cephadm(
-                host, name, 'rm-daemon', args)
-            if not code:
-                # remove item from cache
-                self.cache.rm_daemon(host, name)
-            self.cache.invalidate_host_daemons(host)
-
-            self.cephadm_services[daemon_type_to_service(daemon_type)].post_remove(daemon)
-
-            return "Removed {} from host '{}'".format(name, host)
+        return CephadmServe(self)._remove_daemon(name, host)
 
     def _check_pool_exists(self, pool: str, service_name: str) -> None:
         logger.info(f'Checking pool "{pool}" exists for service {service_name}')
index a258feeedbce4a25c00be3cd007610cb9244bab5..20dc1c0325cfcaccee44ab8fa1ab0eac17be0e39 100644 (file)
@@ -594,7 +594,7 @@ class CephadmServe:
             r = True
             # NOTE: we are passing the 'force' flag here, which means
             # we can delete a mon instances data.
-            self.mgr._remove_daemon(d.name(), d.hostname)
+            self._remove_daemon(d.name(), d.hostname)
 
         if r is None:
             r = False
@@ -611,7 +611,7 @@ class CephadmServe:
                 # (mon and mgr specs should always exist; osds aren't matched
                 # to a service spec)
                 self.log.info('Removing orphan daemon %s...' % dd.name())
-                self.mgr._remove_daemon(dd.name(), dd.hostname)
+                self._remove_daemon(dd.name(), dd.hostname)
 
             # ignore unmanaged services
             if spec and spec.unmanaged:
@@ -833,3 +833,30 @@ class CephadmServe:
                 self.mgr.events.for_daemon(
                     daemon_spec.name(), OrchestratorEvent.ERROR, f'Failed to {what}: {err}')
             return msg
+
+    def _remove_daemon(self, name: str, host: str) -> str:
+        """
+        Remove a daemon
+        """
+        (daemon_type, daemon_id) = name.split('.', 1)
+        daemon = orchestrator.DaemonDescription(
+            daemon_type=daemon_type,
+            daemon_id=daemon_id,
+            hostname=host)
+
+        with set_exception_subject('service', daemon.service_id(), overwrite=True):
+
+            self.mgr.cephadm_services[daemon_type_to_service(daemon_type)].pre_remove(daemon)
+
+            args = ['--name', name, '--force']
+            self.log.info('Removing daemon %s from %s' % (name, host))
+            out, err, code = self.mgr._run_cephadm(
+                host, name, 'rm-daemon', args)
+            if not code:
+                # remove item from cache
+                self.mgr.cache.rm_daemon(host, name)
+            self.mgr.cache.invalidate_host_daemons(host)
+
+            self.mgr.cephadm_services[daemon_type_to_service(daemon_type)].post_remove(daemon)
+
+            return "Removed {} from host '{}'".format(name, host)
index 8bbec38d582f3969483864157cc69a28fc74d58b..70364cc5048086c49c7cc62327b7a46e8c2f8fdd 100644 (file)
@@ -360,7 +360,7 @@ class RemoveUtil(object):
                 continue
             assert osd.fullname is not None
             assert osd.hostname is not None
-            self.mgr._remove_daemon(osd.fullname, osd.hostname)
+            CephadmServe(self.mgr)._remove_daemon(osd.fullname, osd.hostname)
             logger.info(f"Successfully removed OSD <{osd.osd_id}> on {osd.hostname}")
             logger.debug(f"Removing {osd.osd_id} from the queue.")