From: Sage Weil Date: Tue, 5 Feb 2019 16:16:10 +0000 (-0600) Subject: mgr/progress: report events into mgr X-Git-Tag: v14.1.0~160^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7678bfa6b2a4f21f742e7e318dca563a45b4ae5f;p=ceph.git mgr/progress: report events into mgr Signed-off-by: Sage Weil --- diff --git a/src/pybind/mgr/progress/module.py b/src/pybind/mgr/progress/module.py index 4fbfbaddafa3..8bd63093a296 100644 --- a/src/pybind/mgr/progress/module.py +++ b/src/pybind/mgr/progress/module.py @@ -8,6 +8,9 @@ import json ENCODING_VERSION = 1 +# keep a global reference to the module so we can use it from Event methods +_module = None + class Event(object): """ @@ -24,6 +27,12 @@ class Event(object): self.id = None + def _refresh(self): + global _module + _module.log.debug('refreshing mgr for %s (%s) at %f' % (self.id, self._message, + self._progress)) + _module.update_progress_event(self.id, self._message, self._progress) + @property def message(self): return self._message @@ -94,9 +103,11 @@ class RemoteEvent(Event): super(RemoteEvent, self).__init__(message, refs) self.id = my_id self._progress = 0.0 + self._refresh() def set_progress(self, progress): self._progress = progress + self._refresh() @property def progress(self): @@ -125,6 +136,7 @@ class PgRecoveryEvent(Event): self._progress = 0.0 self.id = str(uuid.uuid4()) + self._refresh() @property def evacuating_osds(self): @@ -200,6 +212,7 @@ class PgRecoveryEvent(Event): completed_pgs = self._original_pg_count - len(self._pgs) self._progress = (completed_pgs + complete_accumulate)\ / self._original_pg_count + self._refresh() log.info("Updated progress to {0} ({1})".format( self._progress, self._message @@ -270,6 +283,9 @@ class Module(MgrModule): self._dirty = False + global _module + _module = self + def config_notify(self): for opt in self.MODULE_OPTIONS: setattr(self, @@ -422,13 +438,14 @@ class Module(MgrModule): self._prune_completed_events() def _prune_completed_events(self): - l = len(self._completed_events) - if l > self.max_completed_events: - self._completed_events = self._completed_events[l - self.max_completed_events : l] + length = len(self._completed_events) + if length > self.max_completed_events: + self._completed_events = self._completed_events[length - self.max_completed_events : length] self._dirty = True def serve(self): self.config_notify() + self.clear_all_progress_events() self.log.info("Loading...") self._load() @@ -451,6 +468,7 @@ class Module(MgrModule): def shutdown(self): self._shutdown.set() + self.clear_all_progress_events() def update(self, ev_id, ev_msg, ev_progress): """ @@ -468,12 +486,14 @@ class Module(MgrModule): ev_progress, ev_msg)) ev.set_progress(ev_progress) + ev._refresh() def _complete(self, ev): duration = (datetime.datetime.utcnow() - ev.started_at) self.log.info("Completed event {0} ({1}) in {2} seconds".format( ev.id, ev.message, duration.seconds )) + self.complete_progress_event(ev.id) self._completed_events.append( GhostEvent(ev.id, ev.message, ev.refs))