diff options
author | Samuel Just <sam.just@inktank.com> | 2013-09-09 13:20:29 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2013-09-19 12:50:46 -0700 |
commit | d7df51d58abaa4e27a529a2be5fc6ec43b755b83 (patch) | |
tree | ae09de1b5bab0344b784d6e69aac980dc28b49d8 | |
parent | 342788f5beaa1a5bbb337ec547431ea28cf884c4 (diff) | |
download | ceph-d7df51d58abaa4e27a529a2be5fc6ec43b755b83.tar.gz |
ReplicatedBackend: track object contexts in Push/PullInfo
Signed-off-by: Samuel Just <sam.just@inktank.com>
-rw-r--r-- | src/osd/ReplicatedBackend.h | 3 | ||||
-rw-r--r-- | src/osd/ReplicatedPG.cc | 19 |
2 files changed, 7 insertions, 15 deletions
diff --git a/src/osd/ReplicatedBackend.h b/src/osd/ReplicatedBackend.h index 88323935e96..dca081b7f44 100644 --- a/src/osd/ReplicatedBackend.h +++ b/src/osd/ReplicatedBackend.h @@ -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 { { diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index cc39a32e9e7..9e293bf2627 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -5936,6 +5936,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; } @@ -6116,6 +6117,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; @@ -6323,21 +6325,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(); |