From: Igor Fedotov Date: Wed, 7 Jul 2021 13:17:52 +0000 (+0300) Subject: os/bluestore: compact db after bulk omap naming upgrade. X-Git-Tag: v17.1.0~1413^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0e5c140b79a0b1809a8044696dce1eb7a36b1d41;p=ceph.git 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 --- 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;