From 09739a6611c0470074613f50cec90fb486403376 Mon Sep 17 00:00:00 2001 From: Neha Date: Wed, 11 Dec 2019 23:47:19 +0000 Subject: [PATCH] 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 mimic; made the changes manually in src/osd/PG.cc --- src/osd/PG.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 0e818d1651e79..f46f373a9afa1 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -798,6 +798,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())) { -- 2.39.5