From: Jonas Jelten Date: Mon, 1 Apr 2019 10:28:09 +0000 (+0200) Subject: osd/PG: discover missing objects when an OSD peers and PG is degraded X-Git-Tag: v14.2.2~170^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f0a910de2cfbece049b6f151b20048693cb04201;p=ceph.git osd/PG: discover missing objects when an OSD peers and PG is degraded When a PG is remapped from OSD `a` to OSD `b`, the objects are backfilled. When OSD `a` is restarted, objects become degraded as `a` is no longer queried or considered as a backfill source. As the PG is degraded, `PG::discover_all_missing` is not called when a candidate OSD peers with the primary: The PG is already active, thus `PG::activate` (and in turn missing object discovery) is not called. Discovery is also not initiated from `PG::RecoveryState::Active::react(const MNotifyRec& notevt)` as there are no unfound objects. This patch adds a call to `discover_all_missing` when when an OSD sends its `MNotifyRec` message and the PG is degraded. Fixes: https://tracker.ceph.com/issues/37439 Signed-off-by: Jonas Jelten (cherry picked from commit e152d092f7b7839bb27ac7a5cf1c95f4d3752b32) --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index f7f536265c43..4f56801b25f7 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -8559,7 +8559,7 @@ boost::statechart::result PG::RecoveryState::Active::react(const MNotifyRec& not << dendl; pg->proc_replica_info( notevt.from, notevt.notify.info, notevt.notify.epoch_sent); - if (pg->have_unfound()) { + if (pg->have_unfound() || (pg->is_degraded() && pg->might_have_unfound.count(notevt.from))) { pg->discover_all_missing(*context< RecoveryMachine >().get_query_map()); } }