mirror of
https://github.com/ceph/ceph
synced 2025-03-30 07:19:14 +00:00
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:
parent
5307703bf1
commit
6ed8b7ae56
@ -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;
|
||||
}
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user