]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
HashIndex: reset attr upon split or merge completion
authorSamuel Just <sam.just@inktank.com>
Wed, 24 Jul 2013 01:04:40 +0000 (18:04 -0700)
committerSamuel Just <sam.just@inktank.com>
Thu, 25 Jul 2013 17:37:39 +0000 (10:37 -0700)
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>
(cherry picked from commit 0dc3efdd885377a07987d868af5bb7a38245c90b)

src/os/HashIndex.cc

index 216f53ce72b0d1e4eb282e72c9875c0bbade9f32..6281c6113ccde0979282ad85b3151c8e1bff32f6 100644 (file)
@@ -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);