From ee00d880cd537451d213808732cc1c622910bcc4 Mon Sep 17 00:00:00 2001 From: Dan van der Ster Date: Fri, 30 Apr 2021 01:06:17 +0200 Subject: [PATCH] mgr/progress: ensure progress stays between [0,1] If _original_pg_count is 0 then progress can be negative. Fixes: https://tracker.ceph.com/issues/50591 Related-to: https://tracker.ceph.com/issues/50587 Signed-off-by: Dan van der Ster (cherry picked from commit 20990a94598d0249745e2ec25c9197d842119d92) --- src/pybind/mgr/progress/module.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/pybind/mgr/progress/module.py b/src/pybind/mgr/progress/module.py index f880bb6ef2d..5225021c5eb 100644 --- a/src/pybind/mgr/progress/module.py +++ b/src/pybind/mgr/progress/module.py @@ -265,10 +265,16 @@ class PgRecoveryEvent(Event): self._pgs = list(set(self._pgs) ^ complete) completed_pgs = self._original_pg_count - len(self._pgs) - self._progress = (completed_pgs + complete_accumulate)\ - / self._original_pg_count - self._refresh() + completed_pgs = max(completed_pgs, 0) + try: + prog = (completed_pgs + complete_accumulate)\ + / self._original_pg_count + except ZeroDivisionError: + prog = 0.0 + self._progress = min(max(prog, 0.0), 1.0) + + self._refresh() log.info("Updated progress to {0} ({1})".format( self._progress, self._message )) -- 2.47.3