From: Samuel Just Date: Tue, 23 Jul 2013 20:51:26 +0000 (-0700) Subject: FileStore::_collection_rename: fix global replay guard X-Git-Tag: v0.61.8~23^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6a7b9e5f0c1d2344209c69ab9992f94221a16468;p=ceph.git FileStore::_collection_rename: fix global replay guard If the replay is being replayed, we might have already performed the rename, skip it. Also, we must set the collection replay guard only after we have done the rename. Signed-off-by: Samuel Just Reviewed-by: Sage Weil (cherry picked from commit 870c474c5348831fcb13797d164f49682918fb30) --- diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index 82185dc9d7c8..c764d6bef2a1 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -4352,9 +4352,6 @@ int FileStore::_collection_rename(const coll_t &cid, const coll_t &ncid, get_cdir(cid, old_coll, sizeof(old_coll)); get_cdir(ncid, new_coll, sizeof(new_coll)); - _set_global_replay_guard(cid, spos); - _set_replay_guard(cid, spos); - if (_check_replay_guard(cid, spos) < 0) { return 0; } @@ -4363,6 +4360,16 @@ int FileStore::_collection_rename(const coll_t &cid, const coll_t &ncid, return _collection_remove_recursive(cid, spos); } + if (!collection_exists(cid)) { + if (replaying) { + // already happened + return 0; + } else { + return -ENOENT; + } + } + _set_global_replay_guard(cid, spos); + int ret = 0; if (::rename(old_coll, new_coll)) { if (replaying && !btrfs_stable_commits &&