From: Xuehan Xu Date: Thu, 9 Jul 2026 06:40:12 +0000 (+0800) Subject: crimson/os/seastore/epm: reserve the space in the cold tier before X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e89e2104a8b86ece07e44cff3546ba60d47260a8;p=ceph.git crimson/os/seastore/epm: reserve the space in the cold tier before demoting 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 64e9ff1ae3e8..6fca0efb8fd8 100644 --- a/src/crimson/os/seastore/extent_placement_manager.cc +++ b/src/crimson/os/seastore/extent_placement_manager.cc @@ -1129,8 +1129,17 @@ ExtentPlacementManager::BackgroundProcess::do_background_cycle() } } + if (proceed_demote && + !try_reserve_cold(logical_bucket_demote_size_per_cycle)) { + abort_cold_usage(logical_bucket_demote_size_per_cycle, false); + proceed_demote = false; + } + if (!proceed_clean_main && !proceed_clean_cold && !proceed_demote) { - ceph_abort_msg("no background process will start"); + // abort when the system is full, following the enospc handling + // in ObjectDataHandler + ceph_abort_msg("no background process will start, " + "this probably means the underlying disks are full"); } return seastar::when_all( [this, FNAME, proceed_clean_main, abort_cold_cleaner_usage, @@ -1178,7 +1187,10 @@ ExtentPlacementManager::BackgroundProcess::do_background_cycle() if (!proceed_demote) { return seastar::now(); } - return logical_bucket->demote(); + return logical_bucket->demote( + ).finally([this] { + abort_cold_usage(logical_bucket_demote_size_per_cycle, true); + }); } ).discard_result(); } diff --git a/src/crimson/os/seastore/extent_placement_manager.h b/src/crimson/os/seastore/extent_placement_manager.h index a6e220a273b2..ee4a8a4a90cf 100644 --- a/src/crimson/os/seastore/extent_placement_manager.h +++ b/src/crimson/os/seastore/extent_placement_manager.h @@ -926,9 +926,11 @@ private: ceph_assert(pinboard != nullptr); pinboard->set_background_callback(this); + logical_bucket_demote_size_per_cycle = + get_conf("seastore_logical_bucket_proceed_size_per_cycle"); logical_bucket = create_logical_bucket( get_conf("seastore_logical_bucket_capacity"), - get_conf("seastore_logical_bucket_proceed_size_per_cycle")); + logical_bucket_demote_size_per_cycle); logical_bucket->set_background_callback(this); } LOG_PREFIX(BackgroundProcess::init); @@ -1372,6 +1374,7 @@ private: AsyncCleanerRef main_cleaner; ExtentPinboard *pinboard = nullptr; LogicalBucketRef logical_bucket; + std::size_t logical_bucket_demote_size_per_cycle = 0; /* * cold tier (optional, see has_cold_tier())