From: Sage Weil Date: Sat, 2 Dec 2017 16:40:20 +0000 (-0600) Subject: osd/PG: ignore purged_snaps inconsistencies for now X-Git-Tag: v13.0.2~844^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F18276%2Fhead;p=ceph.git osd/PG: ignore purged_snaps inconsistencies for now These are possible because we update purged_snaps, part of the pg_info_t, but we do not bump the pg version or match it with a log entry, which means that the change does not reliably propagate to new OSDs during peering etc. Signed-off-by: Sage Weil --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index a2cfc99cecdf..dd791e5b3af4 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -7360,7 +7360,18 @@ boost::statechart::result PG::RecoveryState::Active::react(const AdvMap& advmap) lderr(pg->cct) << __func__ << " purged_snaps does not contain " << rm << ", only " << overlap << dendl; pg->info.purged_snaps.subtract(overlap); - bad = true; + // 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 { pg->info.purged_snaps.erase(k.first, k.second); }