From: Neha Date: Wed, 11 Dec 2019 23:47:19 +0000 (+0000) Subject: osd/PeeringState.cc: skip peer_purged when discovering all missing X-Git-Tag: v15.1.0~503^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F32195%2Fhead;p=ceph.git osd/PeeringState.cc: skip peer_purged when discovering all missing We hit a couple of bugs because in discover_all_missing() we send pg_query to an OSD that was marked stray and already got purged. This results in a state machine crash on the purged OSD. Fix this by skipping any purged peers. Fixes: https://tracker.ceph.com/issues/41317 Fixes: https://tracker.ceph.com/issues/40963 Signed-off-by: Neha Ojha --- diff --git a/src/osd/PeeringState.cc b/src/osd/PeeringState.cc index 99534bcc6201..2d3450646cb4 100644 --- a/src/osd/PeeringState.cc +++ b/src/osd/PeeringState.cc @@ -2225,6 +2225,11 @@ bool PeeringState::discover_all_missing( continue; } + if (peer_purged.count(peer)) { + psdout(20) << __func__ << " skipping purged osd." << peer << dendl; + continue; + } + map::const_iterator iter = peer_info.find(peer); if (iter != peer_info.end() && (iter->second.is_empty() || iter->second.dne())) {