]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: set deferred_aggressive if initial throttle get fails 16769/head
authorSage Weil <sage@redhat.com>
Thu, 3 Aug 2017 20:37:36 +0000 (16:37 -0400)
committerSage Weil <sage@redhat.com>
Fri, 4 Aug 2017 02:54:18 +0000 (22:54 -0400)
This ensures that in-progress transactions with deferred writes queue their
IO immediately.  Otherwise, we may end up waiting indefinitely.

This is a biggish hammer.

Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc

index 7276b60fa40a9754e6d731da0579d553b14e27e2..baf4eff96b3547e326f0f626834fcaff64f54936 100644 (file)
@@ -8808,9 +8808,13 @@ int BlueStore::queue_transactions(
   if (txc->deferred_txn) {
     // ensure we do not block here because of deferred writes
     if (!throttle_deferred_bytes.get_or_fail(txc->cost)) {
+      dout(10) << __func__ << " failed get throttle_deferred_bytes, aggressive"
+              << dendl;
+      ++deferred_aggressive;
       deferred_submit_all();
       throttle_deferred_bytes.get(txc->cost);
-    }
+      --deferred_aggressive;
+   }
   }
   utime_t tend = ceph_clock_now();