From: Xuehan Xu Date: Tue, 9 Jun 2026 07:33:24 +0000 (+0800) Subject: crimson/os/seastore/transaction_manager: indicate the extents as COLD X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2d4bd3dc36b05b9e8effdc00fd942986f31d7693;p=ceph-ci.git crimson/os/seastore/transaction_manager: indicate the extents as COLD when demoting them Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/os/seastore/async_cleaner.cc b/src/crimson/os/seastore/async_cleaner.cc index 7ccf710d9e2..6ff73f7995e 100644 --- a/src/crimson/os/seastore/async_cleaner.cc +++ b/src/crimson/os/seastore/async_cleaner.cc @@ -1395,7 +1395,7 @@ do_reclaim_space_ret do_reclaim_space( reclaimed += ext->get_length(); } return extent_callback.rewrite_extents( - t, extents, target_generation, modify_time); + t, extents, target_generation, PLACEMENT_HINT_NULL, modify_time); }); }).si_then([&extent_callback, &t] { return extent_callback.submit_transaction_direct(t); diff --git a/src/crimson/os/seastore/async_cleaner.h b/src/crimson/os/seastore/async_cleaner.h index 9751dc15eea..6f38b9f33fc 100644 --- a/src/crimson/os/seastore/async_cleaner.h +++ b/src/crimson/os/seastore/async_cleaner.h @@ -357,6 +357,7 @@ public: Transaction &t, std::vector &extents, rewrite_gen_t target_generation, + placement_hint_t hint, sea_time_point modify_time) = 0; /** diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index 2ddf7e3f9f7..852b0bbf6aa 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -778,8 +778,14 @@ public: } /// assign the target rewrite generation for the followup rewrite - void set_target_rewrite_generation(rewrite_gen_t gen) { - user_hint = placement_hint_t::REWRITE; + void set_target_rewrite_generation( + rewrite_gen_t gen, + placement_hint_t hint = PLACEMENT_HINT_NULL) { + if (hint != PLACEMENT_HINT_NULL) { + user_hint = hint; + } else { + user_hint = placement_hint_t::REWRITE; + } rewrite_generation = gen; } diff --git a/src/crimson/os/seastore/extent_placement_manager.h b/src/crimson/os/seastore/extent_placement_manager.h index baa983d2d18..a533fbbd0d3 100644 --- a/src/crimson/os/seastore/extent_placement_manager.h +++ b/src/crimson/os/seastore/extent_placement_manager.h @@ -468,7 +468,9 @@ public: ) { assert(opt.hint < placement_hint_t::NUM_HINTS); assert(is_target_rewrite_generation(opt.gen, dynamic_max_rewrite_generation)); - assert(opt.gen == INIT_GENERATION || opt.hint == placement_hint_t::REWRITE); + assert(opt.gen == INIT_GENERATION || + opt.hint == placement_hint_t::REWRITE || + opt.hint == placement_hint_t::COLD); data_category_t category = get_extent_category(type); opt.gen = adjust_generation( @@ -509,7 +511,9 @@ public: LOG_PREFIX(ExtentPlacementManager::alloc_new_data_extents); assert(opt.hint < placement_hint_t::NUM_HINTS); assert(is_target_rewrite_generation(opt.gen, dynamic_max_rewrite_generation)); - assert(opt.gen == INIT_GENERATION || opt.hint == placement_hint_t::REWRITE); + assert(opt.gen == INIT_GENERATION || + opt.hint == placement_hint_t::REWRITE || + opt.hint == placement_hint_t::COLD); data_category_t category = get_extent_category(type); opt.gen = adjust_generation( @@ -748,7 +752,6 @@ private: is_lba_backref_node(type)) { gen = INLINE_GENERATION; } else if (hint == placement_hint_t::COLD) { - assert(gen == INIT_GENERATION); if (background_process.has_cold_tier()) { gen = hot_tier_generations; } else { @@ -786,7 +789,8 @@ private: } if (is_tracked && gen >= hot_tier_generations && - hint != placement_hint_t::REWRITE) { + hint != placement_hint_t::REWRITE && + hint != placement_hint_t::COLD) { gen = hot_tier_generations - 1; } diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index cea5ef82837..049e5f5ba64 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -1430,18 +1430,19 @@ TransactionManager::rewrite_extents_ret TransactionManager::rewrite_extents( Transaction &t, std::vector &extents, rewrite_gen_t target_generation, + placement_hint_t hint, sea_time_point modify_time) { LOG_PREFIX(TransactionManager::rewrite_extents); return seastar::do_with( P_ADDR_NULL, L_ADDR_NULL, - [this, &t, target_generation, modify_time, &extents, FNAME] + [this, &t, target_generation, modify_time, &extents, FNAME, hint] (auto &paddr_hint, auto &next_laddr) { return trans_intr::do_for_each( extents, [this, &t, target_generation, modify_time, FNAME, - &paddr_hint, &next_laddr](auto &extent) { + &paddr_hint, &next_laddr, hint](auto &extent) { { auto updated = cache->update_extent_from_transaction(t, extent); if (!updated) { @@ -1468,7 +1469,7 @@ TransactionManager::rewrite_extents_ret TransactionManager::rewrite_extents( } extent->set_target_rewrite_generation(INIT_GENERATION); } else { - extent->set_target_rewrite_generation(target_generation); + extent->set_target_rewrite_generation(target_generation, hint); ceph_assert(modify_time != NULL_TIME); extent->set_modify_time(modify_time); } @@ -1553,6 +1554,7 @@ TransactionManager::demote_region( co_await rewrite_extents( t, extents, epm->get_max_hot_gen() + 1, + placement_hint_t::COLD, seastar::lowres_system_clock::now()); co_return ret; diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index 702e1ae253f..50a836861d6 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -975,6 +975,7 @@ public: Transaction &t, std::vector &extents, rewrite_gen_t target_generation, + placement_hint_t hint, sea_time_point modify_time) final; using ExtentCallbackInterface::promote_extent_ret;