summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-07-23 18:04:40 -0700
committerSamuel Just <sam.just@inktank.com>2013-07-25 10:32:59 -0700
commit0dc3efdd885377a07987d868af5bb7a38245c90b (patch)
treeab3a889c2301a22d5ccccc7839e698da92d5e349
parent37a4c4af54879512429bb114285bcb4c7c3488d5 (diff)
downloadceph-0dc3efdd885377a07987d868af5bb7a38245c90b.tar.gz
HashIndex: reset attr upon split or merge completion
A replay of an in progress merge or split might make our counts unreliable. Fixes: #5723 Signed-off-by: Samuel Just <sam.just@inktank.com> Reviewed-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/os/HashIndex.cc15
1 files changed, 2 insertions, 13 deletions
diff --git a/src/os/HashIndex.cc b/src/os/HashIndex.cc
index 86a912bbef2..c279bab3a60 100644
--- a/src/os/HashIndex.cc
+++ b/src/os/HashIndex.cc
@@ -447,18 +447,7 @@ int HashIndex::complete_merge(const vector<string> &path, subdir_info_s info) {
r = move_objects(path, dst);
if (r < 0)
return r;
-
- map<string,hobject_t> objects_dst;
- r = list_objects(dst, 0, 0, &objects_dst);
- if (r < 0)
- return r;
- set<string> subdirs;
- r = list_subdirs(dst, &subdirs);
- if (r < 0)
- return r;
- dstinfo.objs = objects_dst.size();
- dstinfo.subdirs = subdirs.size() - 1;
- r = set_info(dst, dstinfo);
+ r = reset_attr(dst);
if (r < 0)
return r;
r = remove_path(path);
@@ -576,7 +565,7 @@ int HashIndex::complete_split(const vector<string> &path, subdir_info_s info) {
if (r < 0)
return r;
info.objs = objects.size();
- r = set_info(path, info);
+ r = reset_attr(path);
if (r < 0)
return r;
r = fsync_dir(path);