From dfe5f05f7948da6200229248a41dc1368737380e Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 29 Aug 2017 22:07:05 -0400 Subject: [PATCH] os/bluestore/BlueFS: compact log even when sync_metadata sees no work It's possible that when sync_metadata() is called there won't be any new log data to flush because it was already flushed for other reasons (e.g., because fsync was called). However, the log may still be large and in need of compaction. Signed-off-by: Sage Weil --- src/os/bluestore/BlueFS.cc | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index 36e883de7442f..b94ae7651d4e6 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -1882,18 +1882,21 @@ void BlueFS::sync_metadata() std::unique_lock l(lock); if (log_t.empty()) { dout(10) << __func__ << " - no pending log events" << dendl; - return; - } - dout(10) << __func__ << dendl; - utime_t start = ceph_clock_now(); - vector> to_release(pending_release.size()); - to_release.swap(pending_release); - flush_bdev(); // FIXME? - _flush_and_sync_log(l); - for (unsigned i = 0; i < to_release.size(); ++i) { - for (auto p = to_release[i].begin(); p != to_release[i].end(); ++p) { - alloc[i]->release(p.get_start(), p.get_len()); + } else { + dout(10) << __func__ << dendl; + utime_t start = ceph_clock_now(); + vector> to_release(pending_release.size()); + to_release.swap(pending_release); + flush_bdev(); // FIXME? + _flush_and_sync_log(l); + for (unsigned i = 0; i < to_release.size(); ++i) { + for (auto p = to_release[i].begin(); p != to_release[i].end(); ++p) { + alloc[i]->release(p.get_start(), p.get_len()); + } } + utime_t end = ceph_clock_now(); + utime_t dur = end - start; + dout(10) << __func__ << " done in " << dur << dendl; } if (_should_compact_log()) { @@ -1903,10 +1906,6 @@ void BlueFS::sync_metadata() _compact_log_async(l); } } - - utime_t end = ceph_clock_now(); - utime_t dur = end - start; - dout(10) << __func__ << " done in " << dur << dendl; } int BlueFS::open_for_write( -- 2.39.5