]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ReplicatedBackend: track object contexts in Push/PullInfo
authorSamuel Just <sam.just@inktank.com>
Mon, 9 Sep 2013 20:20:29 +0000 (13:20 -0700)
committerSamuel Just <sam.just@inktank.com>
Thu, 26 Sep 2013 18:24:27 +0000 (11:24 -0700)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/ReplicatedBackend.h
src/osd/ReplicatedPG.cc

index 88323935e96913c20a88b9cc901fa9c1d3c6798e..dca081b7f44f26b74794c55a37bf02121ddc2345 100644 (file)
@@ -148,6 +148,7 @@ private:
   struct PushInfo {
     ObjectRecoveryProgress recovery_progress;
     ObjectRecoveryInfo recovery_info;
+    ObjectContextRef obc;
 
     void dump(Formatter *f) const {
       {
@@ -168,6 +169,8 @@ private:
   struct PullInfo {
     ObjectRecoveryProgress recovery_progress;
     ObjectRecoveryInfo recovery_info;
+    ObjectContextRef head_ctx;
+    ObjectContextRef obc;
 
     void dump(Formatter *f) const {
       {
index 728af35319389534409a5613a82dcb36b9d2ef5e..272902ae00ea2a16eb65c85a5822cbba5d6fb5be 100644 (file)
@@ -5949,6 +5949,7 @@ void ReplicatedBackend::prepare_pull(
   assert(!pulling.count(soid));
   pull_from_peer[fromosd].insert(soid);
   PullInfo &pi = pulling[soid];
+  pi.head_ctx = headctx;
   pi.recovery_info = op.recovery_info;
   pi.recovery_progress = op.recovery_progress;
 }
@@ -6129,6 +6130,7 @@ void ReplicatedBackend::prep_push(
   get_parent()->begin_peer_recover(peer, soid);
   // take note.
   PushInfo &pi = pushing[soid][peer];
+  pi.obc = obc;
   pi.recovery_info.size = obc->obs.oi.size;
   pi.recovery_info.copy_subset = data_subset;
   pi.recovery_info.clone_subset = clone_subsets;
@@ -6336,21 +6338,8 @@ bool ReplicatedBackend::handle_pull_response(
           << dendl;
 
   if (first) {
-    bufferlist oibl;
-    if (pop.attrset.count(OI_ATTR)) {
-      oibl.push_back(pop.attrset[OI_ATTR]);
-      ::decode(pi.recovery_info.oi, oibl);
-    } else {
-      assert(0);
-    }
-    bufferlist ssbl;
-    if (pop.attrset.count(SS_ATTR)) {
-      ssbl.push_back(pop.attrset[SS_ATTR]);
-      ::decode(pi.recovery_info.ss, ssbl);
-    } else {
-      assert(pi.recovery_info.soid.snap != CEPH_NOSNAP &&
-            pi.recovery_info.soid.snap != CEPH_SNAPDIR);
-    }
+    pi.obc = get_parent()->get_obc(pi.recovery_info.soid, pop.attrset);
+    pi.recovery_info.oi = pi.obc->obs.oi;
   }
 
   bool complete = pi.is_complete();