]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/transaction_manager: indicate the extents as COLD
authorXuehan Xu <xuxuehan@qianxin.com>
Tue, 9 Jun 2026 07:33:24 +0000 (15:33 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Fri, 10 Jul 2026 14:24:37 +0000 (22:24 +0800)
when demoting them

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/os/seastore/async_cleaner.cc
src/crimson/os/seastore/async_cleaner.h
src/crimson/os/seastore/cached_extent.h
src/crimson/os/seastore/extent_placement_manager.h
src/crimson/os/seastore/transaction_manager.cc
src/crimson/os/seastore/transaction_manager.h

index 7ccf710d9e246b39d9fe516c12184d11d9f2d0db..6ff73f7995e5b251c00e39b5764c1e5950f96727 100644 (file)
@@ -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);
index 9751dc15eea52c55a5aae36f3eaa6216087fcaa4..6f38b9f33fc6b6b81e8e7b7137435c5304404795 100644 (file)
@@ -357,6 +357,7 @@ public:
     Transaction &t,
     std::vector<CachedExtentRef> &extents,
     rewrite_gen_t target_generation,
+    placement_hint_t hint,
     sea_time_point modify_time) = 0;
 
   /**
index 2ddf7e3f9f7ea3806d2044dc350ec3d7c1c8f315..852b0bbf6aacfc7d850da58bb3df0321faff965c 100644 (file)
@@ -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;
   }
 
index baa983d2d185a1399e01d2efcdfbff3da29b38a9..a533fbbd0d382fa3078e32101292ca38ec53fa62 100644 (file)
@@ -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;
     }
 
index cea5ef8283793a77b1760c9d95a4fd4373c16c11..049e5f5ba6449e32291c5954dde855e0edb9ec6a 100644 (file)
@@ -1430,18 +1430,19 @@ TransactionManager::rewrite_extents_ret TransactionManager::rewrite_extents(
   Transaction &t,
   std::vector<CachedExtentRef> &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;
index 702e1ae253f3157c5e5b9be85dc337872129ac25..50a836861d6117b6fb42c00864603ca0f6521898 100644 (file)
@@ -975,6 +975,7 @@ public:
     Transaction &t,
     std::vector<CachedExtentRef> &extents,
     rewrite_gen_t target_generation,
+    placement_hint_t hint,
     sea_time_point modify_time) final;
 
   using ExtentCallbackInterface::promote_extent_ret;