]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
PG: Do not discard op data too early
authorJim Schutt <jaschut@sandia.gov>
Thu, 27 Sep 2012 21:56:15 +0000 (15:56 -0600)
committerSage Weil <sage@inktank.com>
Fri, 26 Oct 2012 21:31:23 +0000 (14:31 -0700)
Under a sustained cephfs write load where the offered load is higher
than the storage cluster write throughput, a backlog of replication ops
that arrive via the cluster messenger builds up.  The client message
policy throttler, which should be limiting the total write workload
accepted by the storage cluster, is unable to prevent it, for any
value of osd_client_message_size_cap, under such an overload condition.

The root cause is that op data is released too early, in op_applied().

If instead the op data is released at op deletion, then the limit
imposed by the client policy throttler applies over the entire
lifetime of the op, including commits of replication ops.  That
makes the policy throttler an effective means for an OSD to
protect itself from a sustained high offered load, because it can
effectively limit the total, cluster-wide resources needed to process
in-progress write ops.

Signed-off-by: Jim Schutt <jaschut@sandia.gov>
src/osd/ReplicatedPG.cc

index 3ea7f350bb7ac6db808840845f95048ebcd600db..0ee19b720ac34fe11a6e2ade07e157bb48b17fa1 100644 (file)
@@ -3576,10 +3576,6 @@ void ReplicatedPG::op_applied(RepGather *repop)
   dout(10) << "op_applied " << *repop << dendl;
   if (repop->ctx->op)
     repop->ctx->op->mark_event("op_applied");
-
-  // discard my reference to the buffer
-  if (repop->ctx->op)
-    repop->ctx->op->request->clear_data();
   
   repop->applying = false;
   repop->applied = true;