From 0e5c140b79a0b1809a8044696dce1eb7a36b1d41 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 --- 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 ce1893103774..ec27e5a89008 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -7888,6 +7888,7 @@ void BlueStore::_fsck_check_object_omap(FSCKDepth depth, } db->submit_transaction_sync(txn); repairer->inc_repaired(); + repairer->request_compaction(); } } } @@ -16375,6 +16376,10 @@ unsigned BlueStoreRepairer::apply(KeyValueDB* db) ceph_assert(ok); 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 c08cc6d61aac..c9f316721921 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -3644,10 +3644,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) @@ -3680,6 +3685,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