From c3e0915b8969771903ccd53a44117cca22215ff9 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 12 Aug 2010 12:59:05 -0700 Subject: [PATCH] filestore: fix race in op enqueuing to ensure throttle limit is honors --- src/os/FileStore.cc | 8 +++++++- src/os/FileStore.h | 2 -- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index 22c53594d8905..db420607e8ff4 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -798,9 +798,15 @@ void FileStore::queue_op(Sequencer *posr, uint64_t op_seq, list& t << op_queue_bytes << " > " << g_conf.filestore_queue_max_bytes << dendl; op_tp.wait(op_throttle_cond); } + + op_queue_len++; + op_queue_bytes += bytes; + op_tp.unlock(); - dout(10) << "queue_op " << o << " seq " << op_seq << " " << bytes << " bytes" << dendl; + dout(10) << "queue_op " << o << " seq " << op_seq << " " << bytes << " bytes" + << " (queue has " << op_queue_len << " ops and " << op_queue_bytes << " bytes)" + << dendl; op_wq.queue(osr); } diff --git a/src/os/FileStore.h b/src/os/FileStore.h index 469f4de49b995..da244349e7f31 100644 --- a/src/os/FileStore.h +++ b/src/os/FileStore.h @@ -119,8 +119,6 @@ class FileStore : public JournalingObjectStore { bool _enqueue(OpSequencer *osr) { store->op_queue.push_back(osr); - store->op_queue_len++; - store->op_queue_bytes += osr->q.back()->bytes; return true; } void _dequeue(OpSequencer *o) { -- 2.39.5