diff options
author | Samuel Just <samuel.just@dreamhost.com> | 2012-04-30 09:49:57 -0700 |
---|---|---|
committer | Samuel Just <samuel.just@dreamhost.com> | 2012-04-30 09:49:57 -0700 |
commit | 3adaea723e0396c5480c97b03792beddb0dd6bbf (patch) | |
tree | 72aa2a0bca94b546e4ba20cde149c305c0703656 | |
parent | 0aea1cb1df5c3e5ab783ca6f2ed7649823b613c5 (diff) | |
download | ceph-3adaea723e0396c5480c97b03792beddb0dd6bbf.tar.gz |
OSD: work around inconsistent pool/self-managed snapshot state
Signed-off-by: Samuel Just <samuel.just@dreamhost.com>
-rw-r--r-- | src/osd/OSD.cc | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 787d4f7391c..a5398e94cbf 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -3472,7 +3472,10 @@ void OSD::advance_map(ObjectStore::Transaction& t, C_Contexts *tfin) if (pi->get_snap_epoch() == osdmap->get_epoch()) { pi->build_removed_snaps(pool->newly_removed_snaps); - pool->newly_removed_snaps.subtract(pool->cached_removed_snaps); + interval_set<snapid_t> intersection; + intersection.intersection_of(pool->cached_removed_snaps, + pool->newly_removed_snaps); + pool->newly_removed_snaps.subtract(intersection); pool->cached_removed_snaps.union_of(pool->newly_removed_snaps); dout(10) << " pool " << p->first << " removed_snaps " << pool->cached_removed_snaps << ", newly so are " << pool->newly_removed_snaps << ")" |