diff options
author | Samuel Just <sam.just@inktank.com> | 2013-07-23 13:51:26 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2013-07-23 14:04:29 -0700 |
commit | d50615a5f182e988d975e5dbeead21ba26a71594 (patch) | |
tree | 1fd570b78619cfe8d81746d7e5da11a5c1716f26 | |
parent | 566f8f6e002e02a1a3ca05b242e97e68b1e89504 (diff) | |
download | ceph-d50615a5f182e988d975e5dbeead21ba26a71594.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.cc | 13 |
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 && |