]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/cache: remove retire_extent_addr
authorXuehan Xu <xuxuehan@qianxin.com>
Thu, 21 May 2026 06:50:42 +0000 (14:50 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Thu, 21 May 2026 06:50:42 +0000 (14:50 +0800)
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/os/seastore/cache.cc
src/crimson/os/seastore/cache.h
src/test/crimson/seastore/test_btree_lba_manager.cc

index d8041d01d9b5d55a135201e6b0e4e2ed26a64c2e..8272db88fde1fe7634bf82fe47a7f89290fb99a9 100644 (file)
@@ -50,51 +50,6 @@ Cache::~Cache()
   ceph_assert(extents_index.empty());
 }
 
-// TODO: this method can probably be removed in the future
-Cache::retire_extent_ret Cache::retire_extent_addr(
-  Transaction &t, paddr_t paddr, extent_len_t length)
-{
-  LOG_PREFIX(Cache::retire_extent_addr);
-  TRACET("retire {}~0x{:x}", t, paddr, length);
-
-  assert(paddr.is_real_location());
-
-  CachedExtentRef ext;
-  auto result = t.get_extent(paddr, &ext);
-  if (result == Transaction::get_extent_ret::PRESENT) {
-    DEBUGT("retire {}~0x{:x} on t -- {}",
-           t, paddr, length, *ext);
-    t.add_present_to_retired_set(ext);
-    return retire_extent_iertr::now();
-  } else if (result == Transaction::get_extent_ret::RETIRED) {
-    ERRORT("retire {}~0x{:x} failed, already retired -- {}",
-           t, paddr, length, *ext);
-    ceph_abort();
-  }
-
-  // any record-relative or delayed paddr must have been on the transaction
-  assert(paddr.is_absolute());
-
-  // absent from transaction
-  // retiring is not included by the cache hit metrics
-  ext = query_cache(paddr);
-  if (ext) {
-    DEBUGT("retire {}~0x{:x} in cache -- {}", t, paddr, length, *ext);
-  } else {
-    // add a new placeholder to Cache
-    ext = CachedExtent::make_cached_extent_ref<
-      RetiredExtentPlaceholder>(length);
-    ext->init(
-      CachedExtent::extent_state_t::CLEAN, paddr,
-      PLACEMENT_HINT_NULL, NULL_GENERATION, TRANS_ID_NULL);
-    DEBUGT("retire {}~0x{:x} as placeholder, add extent -- {}",
-           t, paddr, length, *ext);
-    add_extent(ext);
-  }
-  t.add_absent_to_retired_set(ext);
-  return retire_extent_iertr::now();
-}
-
 CachedExtentRef Cache::retire_absent_extent_addr_by_type(
   Transaction &t,
   laddr_t laddr,
index 793a35f0d19ec2f3b009f432f0e4818a1bc17056..204d2c68483c7a9ca1076d1493e33ad8c29b5a9d 100644 (file)
@@ -154,12 +154,6 @@ public:
     t.add_present_to_retired_set(ref);
   }
 
-  /// Declare paddr retired in t
-  using retire_extent_iertr = base_iertr;
-  using retire_extent_ret = base_iertr::future<>;
-  retire_extent_ret retire_extent_addr(
-    Transaction &t, paddr_t addr, extent_len_t length);
-
   template <typename T, typename Func>
   TCachedExtentRef<T> retire_absent_extent_addr(
     Transaction &t,
index 28c033f6a497ed2fc02208b7961fbf000cdf97d7..f54f4c47d713660f28addde9d8421bc05868b095 100644 (file)
@@ -603,16 +603,39 @@ struct btree_lba_manager_test : btree_test_base {
        auto refcount = cursor->get_refcount() - 1;
        auto paddr = cursor->get_paddr();
        auto length = cursor->get_length();
+       if (refcount == 0) {
+          auto p = cursor->parent->template cast<LBALeafNode>();
+          auto v = p->template get_child<TestBlock>(
+            t, cursor->ctx.cache, cursor->get_pos(), cursor->key);
+          if (v.has_child()) {
+            auto extent = co_await v.template get_child_fut_as<TestBlock>();
+            ceph_assert(extent);
+            cache->retire_extent(t, std::move(extent));
+          } else {
+            auto &child_pos = v.get_child_pos();
+            cache->retire_absent_extent_addr_by_type(
+              t,
+              cursor->key,
+              paddr,
+              length,
+              cursor->get_extent_type(),
+              [&child_pos, &t, laddr=cursor->key, this](auto &extent) {
+                auto lextent = extent.template cast<LogicalChildNode>();
+                assert(extent.is_logical());
+                assert(lextent->has_laddr());
+                assert(!extent.has_been_invalidated());
+                child_pos.link_child(lextent.get());
+                child_pos.invalidate_retired_placeholder(t, *cache, extent);
+                lextent->set_laddr(laddr);
+              });
+          }
+       }
        co_await lba_manager->update_mapping_refcount(
          t,
          cursor,
          -1
        );
        EXPECT_EQ(refcount, target->second.refcount);
-       if (refcount == 0) {
-         co_await cache->retire_extent_addr(
-           t, paddr, length);
-       }
       })).unsafe_get();
     if (target->second.refcount == 0) {
       t.mappings.erase(target);