From 4960f579a234f9984d73767fde073c419e884c17 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 --- src/osd/PeeringState.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/osd/PeeringState.cc b/src/osd/PeeringState.cc index 99534bcc620..2d3450646cb 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())) { -- 2.39.5