From: Xuehan Xu Date: Thu, 21 May 2026 06:50:42 +0000 (+0800) Subject: crimson/os/seastore/cache: remove retire_extent_addr X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=593085fe374bbda2736dbe27e246b97bd2e0eb4f;p=ceph-ci.git crimson/os/seastore/cache: remove retire_extent_addr Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index d8041d01d9b..8272db88fde 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -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, diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 793a35f0d19..204d2c68483 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -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 TCachedExtentRef retire_absent_extent_addr( Transaction &t, diff --git a/src/test/crimson/seastore/test_btree_lba_manager.cc b/src/test/crimson/seastore/test_btree_lba_manager.cc index 28c033f6a49..f54f4c47d71 100644 --- a/src/test/crimson/seastore/test_btree_lba_manager.cc +++ b/src/test/crimson/seastore/test_btree_lba_manager.cc @@ -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(); + auto v = p->template get_child( + t, cursor->ctx.cache, cursor->get_pos(), cursor->key); + if (v.has_child()) { + auto extent = co_await v.template get_child_fut_as(); + 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(); + 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);