From: Sage Weil Date: Wed, 11 Sep 2013 22:09:59 +0000 (-0700) Subject: osd: block requests on object during COPY_FROM X-Git-Tag: v0.71~119^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cdc637f0f191db537d9e24a83a017a1405206a47;p=ceph.git osd: block requests on object during COPY_FROM Block any request on an object (read or write) during the COPY_FROM operation. This could potentially be broken down into read vs write operations without much difficulty, but blocking any op indescriminately is sufficient for now, so let's keep it simple. Signed-off-by: Sage Weil --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index c9f4cb624de..ca747db90c6 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -4170,6 +4170,7 @@ void ReplicatedPG::process_copy_chunk(hobject_t oid, tid_t tid, int r) if (r < 0) { copy_ops.erase(ctx->obc->obs.oi.soid); --ctx->obc->copyfrom_readside; + kick_object_context_blocked(ctx->obc); reply_ctx(ctx, r); return; } @@ -4207,6 +4208,7 @@ void ReplicatedPG::process_copy_chunk(hobject_t oid, tid_t tid, int r) copy_ops.erase(ctx->obc->obs.oi.soid); --ctx->obc->copyfrom_readside; ctx->copy_op.reset(); + kick_object_context_blocked(ctx->obc); } void ReplicatedPG::_write_copy_chunk(CopyOpRef cop, ObjectStore::Transaction *t) @@ -4292,6 +4294,8 @@ void ReplicatedPG::cancel_copy(CopyOpRef cop) --ctx->obc->copyfrom_readside; ctx->copy_op.reset(); + kick_object_context_blocked(ctx->obc); + delete ctx; } diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 45937a91dd8..626848bbdf4 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -2153,7 +2153,7 @@ public: } bool is_blocked() const { - return false; + return copyfrom_readside > 0; } // do simple synchronous mutual exclusion, for now. now waitqueues or anything fancy.