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: v14.2.8~88^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F32847%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 (cherry picked from commit 4960f579a234f9984d73767fde073c419e884c17) Conflicts: src/osd/PeeringState.cc - file does not exist in nautilus; made the changes manually in src/osd/PG.cc --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index ecc8a3fd99bb..6ef46f07a4c4 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -814,6 +814,11 @@ void PG::discover_all_missing(map > &query_map) continue; } + if (peer_purged.count(peer)) { + dout(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())) {