From b59a25d9c985e414e3015c76f3fd84a1525afe3c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 4 Jun 2019 14:26:45 -0500 Subject: [PATCH] osd/PG: drop pre-mimic snap_trimq code This is no longer needed for octopus. Signed-off-by: Sage Weil --- src/osd/PG.cc | 126 ++++++++++++++++++++++---------------------------- 1 file changed, 55 insertions(+), 71 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 8b462b68e00..dd5664a3d5a 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -1607,81 +1607,65 @@ void PG::on_active_exit() void PG::on_active_advmap(const OSDMapRef &osdmap) { - if (osdmap->require_osd_release >= ceph_release_t::mimic) { - const auto& new_removed_snaps = osdmap->get_new_removed_snaps(); - auto i = new_removed_snaps.find(get_pgid().pool()); - if (i != new_removed_snaps.end()) { - bool bad = false; - for (auto j : i->second) { - if (snap_trimq.intersects(j.first, j.second)) { - decltype(snap_trimq) added, overlap; - added.insert(j.first, j.second); - overlap.intersection_of(snap_trimq, added); - if (recovery_state.get_last_require_osd_release() < ceph_release_t::mimic) { - derr << __func__ << " removed_snaps already contains " - << overlap << ", but this is the first mimic+ osdmap," - << " so it's expected" << dendl; - } else { - derr << __func__ << " removed_snaps already contains " - << overlap << dendl; - bad = true; - } - snap_trimq.union_of(added); - } else { - snap_trimq.insert(j.first, j.second); - } - } - if (recovery_state.get_last_require_osd_release() < ceph_release_t::mimic) { - // at upgrade, we report *all* previously removed snaps as removed in - // the first mimic epoch. remove the ones we previously divined were - // removed (and subsequently purged) from the trimq. - derr << __func__ << " first mimic map, filtering purged_snaps" - << " from new removed_snaps" << dendl; - snap_trimq.subtract(recovery_state.get_info().purged_snaps); + const auto& new_removed_snaps = osdmap->get_new_removed_snaps(); + auto i = new_removed_snaps.find(get_pgid().pool()); + if (i != new_removed_snaps.end()) { + bool bad = false; + for (auto j : i->second) { + if (snap_trimq.intersects(j.first, j.second)) { + decltype(snap_trimq) added, overlap; + added.insert(j.first, j.second); + overlap.intersection_of(snap_trimq, added); + derr << __func__ << " removed_snaps already contains " + << overlap << dendl; + bad = true; + snap_trimq.union_of(added); + } else { + snap_trimq.insert(j.first, j.second); } - dout(10) << __func__ << " new removed_snaps " << i->second - << ", snap_trimq now " << snap_trimq << dendl; - ceph_assert(!bad || !cct->_conf->osd_debug_verify_cached_snaps); } - - const auto& new_purged_snaps = osdmap->get_new_purged_snaps(); - auto j = new_purged_snaps.find(get_pgid().pgid.pool()); - if (j != new_purged_snaps.end()) { - bool bad = false; - for (auto k : j->second) { - if (!recovery_state.get_info().purged_snaps.contains(k.first, k.second)) { - interval_set rm, overlap; - rm.insert(k.first, k.second); - overlap.intersection_of(recovery_state.get_info().purged_snaps, rm); - derr << __func__ << " purged_snaps does not contain " - << rm << ", only " << overlap << dendl; - recovery_state.adjust_purged_snaps( - [&overlap](auto &purged_snaps) { - purged_snaps.subtract(overlap); - }); - // This can currently happen in the normal (if unlikely) course of - // events. Because adding snaps to purged_snaps does not increase - // the pg version or add a pg log entry, we don't reliably propagate - // purged_snaps additions to other OSDs. - // One example: - // - purge S - // - primary and replicas update purged_snaps - // - no object updates - // - pg mapping changes, new primary on different node - // - new primary pg version == eversion_t(), so info is not - // propagated. - //bad = true; - } else { - recovery_state.adjust_purged_snaps( - [&k](auto &purged_snaps) { - purged_snaps.erase(k.first, k.second); - }); - } + dout(10) << __func__ << " new removed_snaps " << i->second + << ", snap_trimq now " << snap_trimq << dendl; + ceph_assert(!bad || !cct->_conf->osd_debug_verify_cached_snaps); + } + + const auto& new_purged_snaps = osdmap->get_new_purged_snaps(); + auto j = new_purged_snaps.find(get_pgid().pgid.pool()); + if (j != new_purged_snaps.end()) { + bool bad = false; + for (auto k : j->second) { + if (!recovery_state.get_info().purged_snaps.contains(k.first, k.second)) { + interval_set rm, overlap; + rm.insert(k.first, k.second); + overlap.intersection_of(recovery_state.get_info().purged_snaps, rm); + derr << __func__ << " purged_snaps does not contain " + << rm << ", only " << overlap << dendl; + recovery_state.adjust_purged_snaps( + [&overlap](auto &purged_snaps) { + purged_snaps.subtract(overlap); + }); + // This can currently happen in the normal (if unlikely) course of + // events. Because adding snaps to purged_snaps does not increase + // the pg version or add a pg log entry, we don't reliably propagate + // purged_snaps additions to other OSDs. + // One example: + // - purge S + // - primary and replicas update purged_snaps + // - no object updates + // - pg mapping changes, new primary on different node + // - new primary pg version == eversion_t(), so info is not + // propagated. + //bad = true; + } else { + recovery_state.adjust_purged_snaps( + [&k](auto &purged_snaps) { + purged_snaps.erase(k.first, k.second); + }); } - dout(10) << __func__ << " new purged_snaps " << j->second - << ", now " << recovery_state.get_info().purged_snaps << dendl; - ceph_assert(!bad || !cct->_conf->osd_debug_verify_cached_snaps); } + dout(10) << __func__ << " new purged_snaps " << j->second + << ", now " << recovery_state.get_info().purged_snaps << dendl; + ceph_assert(!bad || !cct->_conf->osd_debug_verify_cached_snaps); } } -- 2.39.5