From: Adam Kupczyk Date: Thu, 28 Feb 2019 08:24:45 +0000 (+0100) Subject: os/bluestore: Fix problem with bluefs's freespace not being balanced when kv_sync_thr... X-Git-Tag: v12.2.12~60^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F26866%2Fhead;p=ceph.git os/bluestore: Fix problem with bluefs's freespace not being balanced when kv_sync_thread is sleeping. Fixes: https://tracker.ceph.com/issues/38574 Signed-off-by: Adam Kupczyk (cherry picked from commit cbaa17c1fca858ce25c1e3de193151a8b7b10ef7) Conflicts: src/os/bluestore/BlueStore.cc: trivial resolution --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 6d601aaac83a..a91e0b5a196c 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -8692,18 +8692,24 @@ void BlueStore::_kv_sync_thread() dout(10) << __func__ << " start" << dendl; std::unique_lock l(kv_lock); assert(!kv_sync_started); + bool bluefs_do_check_balance = false; kv_sync_started = true; kv_cond.notify_all(); while (true) { assert(kv_committing.empty()); if (kv_queue.empty() && ((deferred_done_queue.empty() && deferred_stable_queue.empty()) || - !deferred_aggressive)) { + !deferred_aggressive) && + (bluefs_do_check_balance == false)) { if (kv_stop) break; dout(20) << __func__ << " sleep" << dendl; - kv_cond.wait(l); + std::cv_status status = kv_cond.wait_for(l, + std::chrono::milliseconds(int64_t(cct->_conf->bluestore_bluefs_balance_interval * 1000))); dout(20) << __func__ << " wake" << dendl; + if (status == std::cv_status::timeout) { + bluefs_do_check_balance = true; + } } else { deque kv_submitting; deque deferred_done, deferred_stable; @@ -8838,6 +8844,7 @@ void BlueStore::_kv_sync_thread() synct->set(PREFIX_SUPER, "bluefs_extents", bl); } } + bluefs_do_check_balance = false; // cleanup sync deferred keys for (auto b : deferred_stable) {