]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PeeringState.cc: skip peer_purged when discovering all missing 33329/head
authorNeha <nojha@redhat.com>
Wed, 11 Dec 2019 23:47:19 +0000 (23:47 +0000)
committerNathan Cutler <ncutler@suse.com>
Fri, 14 Feb 2020 14:17:43 +0000 (15:17 +0100)
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 <nojha@redhat.com>
(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

index 0e818d1651e7988ef8c993c0b416326c3a559c7e..f46f373a9afa1325091179e7d28ea7ccc1534a8f 100644 (file)
@@ -798,6 +798,11 @@ void PG::discover_all_missing(map<int, map<spg_t,pg_query_t> > &query_map)
       continue;
     }
 
+    if (peer_purged.count(peer)) {
+      dout(20) << __func__ << " skipping purged osd." << peer << dendl;
+      continue;
+    }
+
     map<pg_shard_t, pg_info_t>::const_iterator iter = peer_info.find(peer);
     if (iter != peer_info.end() &&
         (iter->second.is_empty() || iter->second.dne())) {