]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore/BlueStore: ASAP wake up _kv_finalize_thread. 18203/head
authorJianpeng Ma <jianpeng.ma@intel.com>
Mon, 9 Oct 2017 14:38:33 +0000 (22:38 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Mon, 9 Oct 2017 14:38:33 +0000 (22:38 +0800)
Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/os/bluestore/BlueStore.cc

index d2b852f41c7d4fb9752dfa39f63f1f274b9956ae..f519860c7d61d91f6c9a5a78cf424aeef2ae34ff 100644 (file)
@@ -8564,6 +8564,29 @@ void BlueStore::_kv_sync_thread()
       int r = cct->_conf->bluestore_debug_omit_kv_commit ? 0 : db->submit_transaction_sync(synct);
       assert(r == 0);
 
+      {
+       std::unique_lock<std::mutex> m(kv_finalize_lock);
+       if (kv_committing_to_finalize.empty()) {
+         kv_committing_to_finalize.swap(kv_committing);
+       } else {
+         kv_committing_to_finalize.insert(
+             kv_committing_to_finalize.end(),
+             kv_committing.begin(),
+             kv_committing.end());
+         kv_committing.clear();
+       }
+       if (deferred_stable_to_finalize.empty()) {
+         deferred_stable_to_finalize.swap(deferred_stable);
+       } else {
+         deferred_stable_to_finalize.insert(
+             deferred_stable_to_finalize.end(),
+             deferred_stable.begin(),
+             deferred_stable.end());
+         deferred_stable.clear();
+       }
+       kv_finalize_cond.notify_one();
+      }
+
       if (new_nid_max) {
        nid_max = new_nid_max;
        dout(10) << __func__ << " nid_max now " << nid_max << dendl;
@@ -8598,29 +8621,6 @@ void BlueStore::_kv_sync_thread()
        bluefs_extents_reclaiming.clear();
       }
 
-      {
-       std::unique_lock<std::mutex> m(kv_finalize_lock);
-       if (kv_committing_to_finalize.empty()) {
-         kv_committing_to_finalize.swap(kv_committing);
-       } else {
-         kv_committing_to_finalize.insert(
-           kv_committing_to_finalize.end(),
-           kv_committing.begin(),
-           kv_committing.end());
-         kv_committing.clear();
-       }
-       if (deferred_stable_to_finalize.empty()) {
-         deferred_stable_to_finalize.swap(deferred_stable);
-       } else {
-         deferred_stable_to_finalize.insert(
-           deferred_stable_to_finalize.end(),
-           deferred_stable.begin(),
-           deferred_stable.end());
-          deferred_stable.clear();
-       }
-       kv_finalize_cond.notify_one();
-      }
-
       l.lock();
       // previously deferred "done" are now "stable" by virtue of this
       // commit cycle.