From 1bbcb466a5aeca3b965ea681f86b242d1b8e83f6 Mon Sep 17 00:00:00 2001 From: Igor Fedotov Date: Wed, 7 Jul 2021 16:17:52 +0300 Subject: [PATCH] os/bluestore: compact db after bulk omap naming upgrade. Omap naming scheme upgrade introduced recently might perform bulk data removal and hence leave DB in a "degraded" state. Let's compact it. Signed-off-by: Igor Fedotov (cherry picked from commit 0e5c140b79a0b1809a8044696dce1eb7a36b1d41) --- src/os/bluestore/BlueStore.cc | 5 +++++ src/os/bluestore/BlueStore.h | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index d95eb8c19a12..a922b9924952 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -7856,6 +7856,7 @@ void BlueStore::_fsck_check_object_omap(FSCKDepth depth, } db->submit_transaction_sync(txn); repairer->inc_repaired(); + repairer->request_compaction(); } } } @@ -16351,6 +16352,10 @@ unsigned BlueStoreRepairer::apply(KeyValueDB* db) db->submit_transaction_sync(fix_statfs_txn); fix_statfs_txn = nullptr; } + if (need_compact) { + db->compact(); + need_compact = false; + } unsigned repaired = to_repair_cnt; to_repair_cnt = 0; return repaired; diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 9603f7151a67..d30a74bed825 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -3650,10 +3650,15 @@ public: ++to_repair_cnt; } } - // In fact this is the only repairer's method which is thread-safe!! + ////////////////////// + //In fact two methods below are the only ones in this class which are thread-safe!! void inc_repaired() { ++to_repair_cnt; } + void request_compaction() { + need_compact = true; + } + ////////////////////// void init_space_usage_tracker( uint64_t total_space, uint64_t lres_tracking_unit_size) @@ -3686,6 +3691,7 @@ public: private: std::atomic to_repair_cnt = { 0 }; + std::atomic need_compact = { false }; KeyValueDB::Transaction fix_per_pool_omap_txn; KeyValueDB::Transaction fix_fm_leaked_txn; KeyValueDB::Transaction fix_fm_false_free_txn; -- 2.47.3