From: Xuehan Xu Date: Thu, 9 Jul 2026 05:36:51 +0000 (+0800) Subject: crimson/os/seastore/epm: add try_reserve_main and abort_main_usage X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c811ed98ec9306a180471ffeda216ca4ef2fd1df;p=ceph-ci.git crimson/os/seastore/epm: add try_reserve_main and abort_main_usage As the counterpart of try_reserve_cold and abort_cold_usage Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/os/seastore/extent_placement_manager.cc b/src/crimson/os/seastore/extent_placement_manager.cc index c143d188d4c..62176db27de 100644 --- a/src/crimson/os/seastore/extent_placement_manager.cc +++ b/src/crimson/os/seastore/extent_placement_manager.cc @@ -976,23 +976,35 @@ void ExtentPlacementManager::BackgroundProcess::abort_cold_usage( } } +bool ExtentPlacementManager::BackgroundProcess::try_reserve_main( + std::size_t usage) +{ + return main_cleaner->try_reserve_projected_usage(usage); +} + reserve_cleaner_result_t ExtentPlacementManager::BackgroundProcess::try_reserve_cleaner( const cleaner_usage_t &usage) { return { - main_cleaner->try_reserve_projected_usage(usage.main_usage), + try_reserve_main(usage.main_usage), try_reserve_cold(usage.cold_ool_usage) }; } +void ExtentPlacementManager::BackgroundProcess::abort_main_usage( + std::size_t usage, bool success) +{ + if (success) { + main_cleaner->release_projected_usage(usage); + } +} + void ExtentPlacementManager::BackgroundProcess::abort_cleaner_usage( const cleaner_usage_t &usage, const reserve_cleaner_result_t &result) { - if (result.reserve_main_success) { - main_cleaner->release_projected_usage(usage.main_usage); - } + abort_main_usage(usage.main_usage, result.reserve_main_success); abort_cold_usage(usage.cold_ool_usage, result.reserve_cold_success); } @@ -1183,16 +1195,16 @@ seastar::future<> ExtentPlacementManager::BackgroundProcess::run_promote() return seastar::futurize_invoke([this] { if (pinboard->should_promote()) { - auto usage = cleaner_usage_t{pinboard->get_promotion_size(), 0}; - auto res = try_reserve_cleaner(usage); - if (res.is_successful()) { + auto usage = pinboard->get_promotion_size(); + auto reserved = try_reserve_main(usage); + if (reserved) { return pinboard->promote( - ).finally([this, usage, res] { - abort_cleaner_usage(usage, res); + ).finally([this, usage] { + abort_main_usage(usage, true); }); } else { // reserve usage failed, block - abort_cleaner_usage(usage, res); + abort_main_usage(usage, false); } } // shouldn't promote, block diff --git a/src/crimson/os/seastore/extent_placement_manager.h b/src/crimson/os/seastore/extent_placement_manager.h index be22735b904..55c78c6661f 100644 --- a/src/crimson/os/seastore/extent_placement_manager.h +++ b/src/crimson/os/seastore/extent_placement_manager.h @@ -1127,7 +1127,9 @@ private: private: // reserve helpers bool try_reserve_cold(std::size_t usage); + bool try_reserve_main(std::size_t usage); void abort_cold_usage(std::size_t usage, bool success); + void abort_main_usage(std::size_t usage, bool success); reserve_cleaner_result_t try_reserve_cleaner(const cleaner_usage_t &usage); void abort_cleaner_usage(const cleaner_usage_t &usage,