summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Just <samuel.just@dreamhost.com>2012-05-04 13:31:30 -0700
committerSamuel Just <samuel.just@dreamhost.com>2012-05-04 13:31:30 -0700
commit4f891d6c6ada6ed502cb23b9d6004b8002c98fbd (patch)
treef5ec412e1e242cfa4652bcfae6328b4e883802c7
parent3adaea723e0396c5480c97b03792beddb0dd6bbf (diff)
downloadceph-historic/snap-workaround.tar.gz
PG: handle case where purged_snaps contains a snap not in snap_trimqhistoric/snap-workaround
Signed-off-by: Samuel Just <samuel.just@dreamhost.com>
-rw-r--r--src/osd/PG.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/osd/PG.cc b/src/osd/PG.cc
index 3879fa08414..87141144a34 100644
--- a/src/osd/PG.cc
+++ b/src/osd/PG.cc
@@ -1236,7 +1236,9 @@ void PG::activate(ObjectStore::Transaction& t, list<Context*>& tfin,
// initialize snap_trimq
if (is_primary()) {
snap_trimq = pool->cached_removed_snaps;
- snap_trimq.subtract(info.purged_snaps);
+ interval_set<snapid_t> intersect;
+ intersect.intersection_of(snap_trimq, info.purged_snaps);
+ snap_trimq.subtract(intersect);
dout(10) << "activate - snap_trimq " << snap_trimq << dendl;
if (!snap_trimq.empty() && is_clean())
queue_snap_trim();