]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm/osd: Add pytest for osd removal
authorSebastian Wagner <sebastian.wagner@suse.com>
Fri, 28 Feb 2020 09:35:43 +0000 (10:35 +0100)
committerSage Weil <sage@redhat.com>
Fri, 6 Mar 2020 18:29:49 +0000 (12:29 -0600)
Signed-off-by: Sebastian Wagner <sebastian.wagner@suse.com>
src/pybind/mgr/cephadm/osd.py
src/pybind/mgr/cephadm/tests/test_cephadm.py

index 7ff5973497b87c4641177685134dd27dd27daa5a..9a0c243e75cfbbc720ca8068fc90645a2edcd679 100644 (file)
@@ -3,7 +3,7 @@ import json
 import logging
 import time
 
-from typing import List, NamedTuple, Dict, Any, Set
+from typing import List, NamedTuple, Dict, Any, Set, Union
 
 import orchestrator
 from orchestrator import OrchestratorError
@@ -31,7 +31,7 @@ class RemoveUtil(object):
     def __init__(self, mgr):
         self.mgr = mgr
         self.to_remove_osds: Set[OSDRemoval] = set()
-        self.osd_removal_report: dict = dict()
+        self.osd_removal_report: Dict[OSDRemoval, Union[int,str]] = dict()
 
 
     def _remove_osds_bg(self) -> None:
@@ -73,7 +73,7 @@ class RemoveUtil(object):
                     raise orchestrator.OrchestratorError(f"Could not purge OSD <{osd.osd_id}>")
 
             completion = self.mgr._remove_daemon([(osd.fullname, osd.nodename, True)])
-            completion.add_progress('Removing OSDs', self)
+            completion.add_progress('Removing OSDs', self.mgr)
             completion.update_progress = True
             if completion:
                 while not completion.has_result:
@@ -92,12 +92,12 @@ class RemoveUtil(object):
             logger.debug(f"Removing {osd.osd_id} from the queue.")
             self.to_remove_osds.remove(osd)
 
-    def _generate_osd_removal_status(self) -> Dict[Any, object]:
+    def _generate_osd_removal_status(self) -> Dict[OSDRemoval, Union[int,str]]:
         """
         Generate a OSD report that can be printed to the CLI
         """
         logger.debug("Assembling report for osd rm status")
-        report = {}
+        report: Dict[OSDRemoval, Union[int,str]] = {}
         for osd in self.to_remove_osds:
             pg_count = self.get_pg_count(str(osd.osd_id))
             report[osd] = pg_count if pg_count != -1 else 'n/a'
index 1d912d81b9223fcb57728688cec1328f15cb5925..db524617ed8a64a233f9fd30e80d2d78faf876af 100644 (file)
@@ -1,9 +1,11 @@
+import datetime
 import json
 from contextlib import contextmanager
 
 import pytest
 
 from ceph.deployment.drive_group import DriveGroupSpec, DeviceSelection
+from cephadm.osd import OSDRemoval
 
 try:
     from typing import Any
@@ -134,14 +136,27 @@ class TestCephadm(object):
             )
         ])
     ))
+    @mock.patch("cephadm.osd.RemoveUtil.get_pg_count", lambda _, __: 0)
     def test_remove_osds(self, cephadm_module):
         with self._with_host(cephadm_module, 'test'):
             c = cephadm_module.list_daemons(refresh=True)
             wait(cephadm_module, c)
+
             c = cephadm_module.remove_daemons(['osd.0'], False)
             out = wait(cephadm_module, c)
             assert out == ["Removed osd.0 from host 'test'"]
 
+            osd_removal_op = OSDRemoval(0, False, False, 'test', 'osd.0', datetime.datetime.utcnow())
+            cephadm_module.rm_util.to_remove_osds.add(osd_removal_op)
+            cephadm_module.rm_util._remove_osds_bg()
+            assert cephadm_module.rm_util.to_remove_osds == set()
+
+            c = cephadm_module.remove_osds_status()
+            out = wait(cephadm_module, c)
+            assert out == {osd_removal_op: 0}
+
+
+
     @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('{}'))
     def test_mds(self, cephadm_module):
         with self._with_host(cephadm_module, 'test'):