summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-07-23 13:51:26 -0700
committerSamuel Just <sam.just@inktank.com>2013-07-23 14:04:29 -0700
commitd50615a5f182e988d975e5dbeead21ba26a71594 (patch)
tree1fd570b78619cfe8d81746d7e5da11a5c1716f26
parent566f8f6e002e02a1a3ca05b242e97e68b1e89504 (diff)
downloadceph-wip-cuttlefish-next.tar.gz
FileStore::_collection_rename: fix global replay guardwip-cuttlefish-next
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 <sam.just@inktank.com>
-rw-r--r--src/os/FileStore.cc13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc
index 82185dc9d7c..c764d6bef2a 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 &&