ReplicatedPG: copy: add an ObjectContextRef to CopyOp

Use that instead of the OpContext::obc in copy codepaths.

Signed-off-by: Greg Farnum <greg@inktank.com>
This commit is contained in:
Greg Farnum 2013-09-30 16:20:26 -07:00
parent 5307703bf1
commit 6ed8b7ae56
2 changed files with 10 additions and 10 deletions

View File

@ -4395,7 +4395,7 @@ int ReplicatedPG::start_copy(OpContext *ctx,
cancel_copy(cop);
}
CopyOpRef cop(new CopyOp(ctx, src, oloc, version));
CopyOpRef cop(new CopyOp(ctx, ctx->obc, src, oloc, version));
copy_ops[dest] = cop;
ctx->copy_op = cop;
++ctx->obc->copyfrom_readside;
@ -4449,8 +4449,7 @@ void ReplicatedPG::process_copy_chunk(hobject_t oid, tid_t tid, int r)
<< " tid " << cop->objecter_tid << dendl;
return;
}
OpContext *ctx = cop->ctx;
ObjectContextRef obc = ctx->obc;
ObjectContextRef obc = cop->obc;
cop->objecter_tid = 0;
if (r >= 0) {
@ -4484,11 +4483,11 @@ void ReplicatedPG::process_copy_chunk(hobject_t oid, tid_t tid, int r)
}
dout(20) << __func__ << " complete; committing" << dendl;
execute_ctx(ctx);
execute_ctx(cop->ctx);
copy_ops.erase(obc->obs.oi.soid);
--obc->copyfrom_readside;
ctx->copy_op.reset();
cop->ctx->copy_op.reset();
kick_object_context_blocked(obc);
}
@ -4571,11 +4570,11 @@ void ReplicatedPG::cancel_copy(CopyOpRef cop)
osd->objecter->op_cancel(cop->objecter_tid);
}
copy_ops.erase(ctx->obc->obs.oi.soid);
--ctx->obc->copyfrom_readside;
copy_ops.erase(cop->obc->obs.oi.soid);
--cop->obc->copyfrom_readside;
ctx->copy_op.reset();
kick_object_context_blocked(ctx->obc);
kick_object_context_blocked(cop->obc);
delete ctx;
}

View File

@ -96,6 +96,7 @@ public:
struct CopyOp {
OpContext *ctx;
ObjectContextRef obc;
hobject_t src;
object_locator_t oloc;
version_t version;
@ -114,8 +115,8 @@ public:
hobject_t temp_oid;
object_copy_cursor_t temp_cursor;
CopyOp(OpContext *c, hobject_t s, object_locator_t l, version_t v)
: ctx(c), src(s), oloc(l), version(v),
CopyOp(OpContext *c, ObjectContextRef _obc, hobject_t s, object_locator_t l, version_t v)
: ctx(c), obc(_obc), src(s), oloc(l), version(v),
objecter_tid(0),
size(0),
rval(-1)