From: Kamoltat (Junior) Sirivadhna Date: Fri, 21 Jun 2019 18:06:53 +0000 (-0400) Subject: mgr/progress: Bug fix complete event when OSD marked in X-Git-Tag: v14.2.17~114^2~1^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cc41195b4308c43ec4eb0766c3a9522b02fcc994;p=ceph.git mgr/progress: Bug fix complete event when OSD marked in Swap the order of checking for complete event when OSD is marked in and creating a PG Recovery event so that the event doesn't cancel itself. Signed-off-by: Kamoltat (Junior) Sirivadhna (cherry picked from commit 93d4d9d7044e991a7bbdb70b0aef02284e6eda22) Conflicts: src/pybind/mgr/progress/module.py - change self._events.item() to list(self._events) - add self.get("pg_ready") --- diff --git a/src/pybind/mgr/progress/module.py b/src/pybind/mgr/progress/module.py index 3ad514a65a69..ca6581e5dd2e 100644 --- a/src/pybind/mgr/progress/module.py +++ b/src/pybind/mgr/progress/module.py @@ -419,26 +419,28 @@ class Module(MgrModule): self.log.warn("{0} PGs affected by osd.{1} being marked {2}".format( len(affected_pgs), osd_id, marked)) - if len(affected_pgs) > 0: - ev = PgRecoveryEvent( - "Rebalancing after osd.{0} marked {1}".format(osd_id, marked), - refs=[("osd", osd_id)], - which_pgs=affected_pgs, - evacuate_osds=[osd_id] - ) - ev.pg_update(self.get("pg_dump"), self.log) - self._events[ev.id] = ev - + # In the case of the osd coming back in, we might need to cancel # previous recovery event for that osd if marked == "in": - for ev_id, ev in self._events.items(): + for ev_id in list(self._events): + ev = self._events[ev_id] if isinstance(ev, PgRecoveryEvent) and osd_id in ev.evacuating_osds: self.log.info("osd.{0} came back in, cancelling event".format( osd_id )) self._complete(ev) + if len(affected_pgs) > 0: + ev = PgRecoveryEvent( + "Rebalancing after osd.{0} marked {1}".format(osd_id, marked), + refs=[("osd", osd_id)], + which_pgs=affected_pgs, + evacuate_osds=[osd_id] + ) + ev.pg_update(self.get("pg_dump"), self.get("pg_ready"), self.log) + self._events[ev.id] = ev + def _osdmap_changed(self, old_osdmap, new_osdmap): old_dump = old_osdmap.dump() new_dump = new_osdmap.dump()