From: Kefu Chai Date: Wed, 1 Jul 2020 11:33:35 +0000 (+0800) Subject: mon/PGMap: do not consider changing pg stuck X-Git-Tag: v14.2.11~57^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F35959%2Fhead;p=ceph.git mon/PGMap: do not consider changing pg stuck there is chance that we have a PG just created but fails to peered before a mgr module retrieves the health report from mgr. in that case, the "last_peered" field is not set, as that pg has not peered. but normally, the newly created PG will be active+clean in couple seconds which is way under the default setting of mon_pg_stuck_threshold (60 seconds). so in this change, if the "last_whatever" is not set, we also use the "last_changed" as a reference to see if the PG is healthy, and only consider PG stuck if the last_changed is also too old. Fixes: https://tracker.ceph.com/issues/45717 Signed-off-by: Kefu Chai (cherry picked from commit 34e1df66cdf9ac4aeea338a8f3d5b9a10fa5983a) --- diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index 947dc84effc33..58d74becacc0f 100644 --- a/src/mon/PGMap.cc +++ b/src/mon/PGMap.cc @@ -2475,7 +2475,11 @@ void PGMap::get_health_checks( if (pg_response.stuck_since) { // Delayed response, check for stuckness utime_t last_whatever = pg_response.stuck_since(pg_info); - if (last_whatever >= cutoff) { + if (last_whatever.is_zero() && + pg_info.last_change >= cutoff) { + // still moving, ignore + continue; + } else if (last_whatever >= cutoff) { // Not stuck enough, ignore. continue; } else {