]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix osd_recover_clone_overlap
authorSage Weil <sage@newdream.net>
Thu, 2 Feb 2012 18:31:17 +0000 (10:31 -0800)
committerSage Weil <sage@newdream.net>
Thu, 2 Feb 2012 18:53:39 +0000 (10:53 -0800)
- we need to populate data_subset
- add check in calc_head_subsets() too

Fixes 2116f012.

Signed-off-by: Sage Weil <sage@newdream.net>
src/osd/ReplicatedPG.cc

index bcef42d0683f1d11d321a7c96b50bba946133c42..67ea4d04d941a5300de5973bd162fc26af23ba76 100644 (file)
@@ -3774,6 +3774,11 @@ void ReplicatedPG::calc_head_subsets(ObjectContext *obc, SnapSet& snapset, const
   if (size)
     data_subset.insert(0, size);
 
+  if (!g_conf->osd_recover_clone_overlap) {
+    dout(10) << "calc_head_subsets " << head << " -- osd_recover_clone_overlap disabled" << dendl;
+    return;
+  }
+
 
   interval_set<uint64_t> cloning;
   interval_set<uint64_t> prev;
@@ -3809,16 +3814,18 @@ void ReplicatedPG::calc_clone_subsets(SnapSet& snapset, const hobject_t& soid,
                                      interval_set<uint64_t>& data_subset,
                                      map<hobject_t, interval_set<uint64_t> >& clone_subsets)
 {
-  if (!g_conf->osd_recover_clone_overlap) {
-    dout(10) << "calc_clone_subsets " << soid << " -- osd_recover_clone_overlap disabled" << dendl;
-    return;
-  }
-  
   dout(10) << "calc_clone_subsets " << soid
           << " clone_overlap " << snapset.clone_overlap << dendl;
 
   uint64_t size = snapset.clone_size[soid.snap];
+  if (size)
+    data_subset.insert(0, size);
 
+  if (!g_conf->osd_recover_clone_overlap) {
+    dout(10) << "calc_clone_subsets " << soid << " -- osd_recover_clone_overlap disabled" << dendl;
+    return;
+  }
+  
   unsigned i;
   for (i=0; i < snapset.clones.size(); i++)
     if (snapset.clones[i] == soid.snap)
@@ -3864,8 +3871,6 @@ void ReplicatedPG::calc_clone_subsets(SnapSet& snapset, const hobject_t& soid,
   }
   
   // what's left for us to push?
-  if (size)
-    data_subset.insert(0, size);
   data_subset.subtract(cloning);
 
   dout(10) << "calc_clone_subsets " << soid