summaryrefslogtreecommitdiff
path: root/src/osd/OSD.cc
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-04-29 11:29:04 -0700
committerSamuel Just <sam.just@inktank.com>2013-05-07 08:16:04 -0700
commitd7cd957433fcf0f4c40964709a485654e53d2a4d (patch)
tree82101ef439d94d25b6c2a56a48e840a83639560d /src/osd/OSD.cc
parent7b22cfb2f8448ba61885c92d0ebf576e742f270b (diff)
downloadceph-d7cd957433fcf0f4c40964709a485654e53d2a4d.tar.gz
OSD::clear_temp should clear snap mapper entries as well
Signed-off-by: Samuel Just <sam.just@inktank.com>
Diffstat (limited to 'src/osd/OSD.cc')
-rw-r--r--src/osd/OSD.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc
index 690bce68787..83cf0a9589f 100644
--- a/src/osd/OSD.cc
+++ b/src/osd/OSD.cc
@@ -1507,6 +1507,12 @@ int OSD::read_superblock()
void OSD::clear_temp(ObjectStore *store, coll_t tmp)
{
+ OSDriver driver(
+ store,
+ coll_t(),
+ make_snapmapper_oid());
+ SnapMapper mapper(&driver, 0, 0, 0);
+
vector<hobject_t> objects;
store->collection_list(tmp, objects);
@@ -1516,6 +1522,10 @@ void OSD::clear_temp(ObjectStore *store, coll_t tmp)
for (vector<hobject_t>::iterator p = objects.begin();
p != objects.end();
++p, removed++) {
+ OSDriver::OSTransaction _t(driver.get_transaction(&t));
+ int r = mapper.remove_oid(*p, &_t);
+ if (r != 0 && r != -ENOENT)
+ assert(0);
t.collection_remove(tmp, *p);
if (removed > 300) {
int r = store->apply_transaction(t);