FileStore::_collection_move_rename: remove source before closing guard

Fixes a bug in _collection_move_rename replays.

Signed-off-by: Samuel Just <sam.just@inktank.com>
This commit is contained in:
Samuel Just 2013-12-08 14:44:48 -08:00
parent 06f7a98a03
commit b7d100b697

View File

@ -4342,13 +4342,26 @@ int FileStore::_collection_move_rename(coll_t oldcid, const ghobject_t& oldoid,
_inject_failure();
lfn_close(fd);
fd = FDRef();
if (r == 0)
r = lfn_unlink(oldcid, oldoid, spos, true);
if (r == 0)
r = lfn_open(c, o, 0, &fd);
// close guard on object so we don't do this again
if (r == 0) {
if (r == 0)
_close_replay_guard(**fd, spos);
}
lfn_close(fd);
}
dout(10) << __func__ << " " << c << "/" << o << " from " << oldcid << "/" << oldoid
<< " = " << r << dendl;
return r;
out_rm_src:
// remove source
if (_check_replay_guard(oldcid, oldoid, spos) > 0) {