summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-09-09 13:20:29 -0700
committerSamuel Just <sam.just@inktank.com>2013-09-19 12:50:46 -0700
commitd7df51d58abaa4e27a529a2be5fc6ec43b755b83 (patch)
treeae09de1b5bab0344b784d6e69aac980dc28b49d8
parent342788f5beaa1a5bbb337ec547431ea28cf884c4 (diff)
downloadceph-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.h3
-rw-r--r--src/osd/ReplicatedPG.cc19
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();