]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: make OSDRemovalQueue not inherent from set
authorSebastian Wagner <sebastian.wagner@suse.com>
Fri, 8 Jan 2021 11:06:10 +0000 (12:06 +0100)
committerSebastian Wagner <sebastian.wagner@suse.com>
Fri, 22 Jan 2021 11:24:10 +0000 (12:24 +0100)
Instead, let's make it a member.

Signed-off-by: Sebastian Wagner <sebastian.wagner@suse.com>
(cherry picked from commit 086afa9a69cb99258abfab270420b4968d7c3717)

src/pybind/mgr/cephadm/services/osd.py
src/pybind/mgr/cephadm/tests/test_osd_removal.py

index 2f26a095b2227bad9d8875146b995d9648fb499a..15f3bd04cb7681abfdb5eefe40f6360234f5f24d 100644 (file)
@@ -325,8 +325,8 @@ class RemoveUtil(object):
 
         # Check all osds for their state and take action (remove, purge etc)
         to_remove_osds = self.mgr.to_remove_osds.all_osds()
-        new_queue = set()
-        for osd in to_remove_osds:
+        new_queue: Set[OSD] = set()
+        for osd in to_remove_osds:  # type: OSD
             if not osd.force:
                 # skip criteria
                 if not osd.is_empty:
@@ -491,7 +491,8 @@ class RemoveUtil(object):
             for osd in json.loads(v):
                 logger.debug(f"Loading osd ->{osd} from store")
                 osd_obj = OSD.from_json(osd, ctx=self)
-                self.mgr.to_remove_osds.add(osd_obj)
+                if osd_obj is not None:
+                    self.mgr.to_remove_osds.add(osd_obj)
 
 
 class NotFoundError(Exception):
@@ -549,7 +550,7 @@ class OSD:
         self.fullname = fullname
 
         # mgr obj to make mgr/mon calls
-        self.rm_util = remove_util
+        self.rm_util: RemoveUtil = remove_util
 
     def start(self) -> None:
         if self.started:
@@ -675,36 +676,36 @@ class OSD:
         return f"<OSD>(osd_id={self.osd_id}, draining={self.draining})"
 
 
-class OSDRemovalQueue(Set):
+class OSDRemovalQueue(object):
 
     def __init__(self) -> None:
-        super().__init__()
+        self.osds: Set[OSD] = set()
 
     def as_osd_ids(self) -> List[int]:
-        return [osd.osd_id for osd in self]
+        return [osd.osd_id for osd in self.osds]
 
     def queue_size(self) -> int:
-        return len(self)
+        return len(self.osds)
 
     def draining_osds(self) -> List["OSD"]:
-        return [osd for osd in self if osd.is_draining]
+        return [osd for osd in self.osds if osd.is_draining]
 
     def idling_osds(self) -> List["OSD"]:
-        return [osd for osd in self if not osd.is_draining and not osd.is_empty]
+        return [osd for osd in self.osds if not osd.is_draining and not osd.is_empty]
 
     def empty_osds(self) -> List["OSD"]:
-        return [osd for osd in self if osd.is_empty]
+        return [osd for osd in self.osds if osd.is_empty]
 
     def all_osds(self) -> List["OSD"]:
-        return [osd for osd in self]
+        return [osd for osd in self.osds]
 
     def not_in_cluster(self) -> List["OSD"]:
-        return [osd for osd in self if not osd.exists]
+        return [osd for osd in self.osds if not osd.exists]
 
     def enqueue(self, osd: "OSD") -> None:
         if not osd.exists:
             raise NotFoundError()
-        self.add(osd)
+        self.osds.add(osd)
         osd.start()
 
     def rm(self, osd: "OSD") -> None:
@@ -713,7 +714,21 @@ class OSDRemovalQueue(Set):
         osd.stop()
         try:
             logger.debug(f'Removing {osd} from the queue.')
-            self.remove(osd)
+            self.osds.remove(osd)
         except KeyError:
             logger.debug(f"Could not find {osd} in queue.")
             raise KeyError
+
+    def remove(self, osd: OSD) -> None:
+        self.osds.remove(osd)
+
+    def add(self, osd: OSD) -> None:
+        self.osds.add(osd)
+
+    def intersection_update(self, other: Set[OSD]) -> None:
+        self.osds.intersection_update(other)
+
+    def __eq__(self, other: Any) -> bool:
+        if not isinstance(other, OSDRemovalQueue):
+            return False
+        return self.osds == other.osds
index 5ac4209ccff04e93fd766999f55ec90d900b252e..76f067bb55a43ce1a3168c9ebbb1c0ea9900616e 100644 (file)
@@ -73,7 +73,7 @@ class TestOSDRemoval:
         rm_util._run_mon_cmd.assert_called_with(
             {'prefix': 'osd purge-actual', 'id': 1, 'yes_i_really_mean_it': True})
 
-    def test_load(self, cephadm_module):
+    def test_load(self, cephadm_module, rm_util):
         data = json.dumps([
             {
                 "osd_id": 35,
@@ -92,8 +92,9 @@ class TestOSDRemoval:
         cephadm_module.set_store('osd_remove_queue', data)
         cephadm_module.rm_util.load_from_store()
 
-        assert repr(
-            cephadm_module.to_remove_osds) == 'OSDRemovalQueue({<OSD>(osd_id=35, draining=True)})'
+        expected = OSDRemovalQueue()
+        expected.add(OSD(osd_id=35, remove_util=rm_util, draining=True))
+        assert cephadm_module.to_remove_osds == expected
 
 
 class TestOSD: