]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
objecter: don't resend paused ops
authorJosh Durgin <josh.durgin@inktank.com>
Wed, 6 Nov 2013 02:46:37 +0000 (10:46 +0800)
committerSage Weil <sage@inktank.com>
Mon, 30 Dec 2013 16:38:05 +0000 (08:38 -0800)
Paused ops are meant to block on the client side until a new map that
unpauses them is recieved. If we send paused writes when the FULL flag
is set, we'll get -ENOSPC from the osds, which is not what Objecter
users expect. This may cause rbd without caching to produce an I/O
error instead of waiting for the cluster to have capacity.

Fixes: #6725
Backport: dumpling
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
(cherry picked from commit c5c399d327cfc0d232d9ec7d49ababa914d0b21a)

src/osdc/Objecter.cc

index d2c574d982e1eed85476d25f89b15f29a261d12a..286c03dd2d6f21fb502a4af2e67870731c3a929f 100644 (file)
@@ -1001,7 +1001,8 @@ void Objecter::kick_requests(OSDSession *session)
     ++p;
     logger->inc(l_osdc_op_resend);
     if (op->should_resend) {
-      resend[op->tid] = op;
+      if (!op->paused)
+       resend[op->tid] = op;
     } else {
       cancel_linger_op(op);
     }