From: Xuehan Xu Date: Sun, 3 Aug 2025 08:43:12 +0000 (+0800) Subject: crimson/os/seastore/cached_extent: rename get_transactional_view to X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=50d70361e2b19631716f417447b8021bcdae8d30;p=ceph.git crimson/os/seastore/cached_extent: rename get_transactional_view to maybe_get_transactional_view It returns nullptr if the extent is not viewable by the transaction Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 06f23c8f3d29..bf712d3ecccc 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -517,7 +517,9 @@ public: CachedExtentRef extent) final { assert(extent); - return extent->get_transactional_view(t); + auto ext = extent->maybe_get_transactional_view(t); + ceph_assert(ext); + return ext; } get_extent_iertr::future<> maybe_wait_accessible( @@ -611,7 +613,8 @@ public: bool needs_step_2 = false; bool needs_touch = false; if (extent->is_stable()) { - p_extent = extent->get_transactional_view(t); + p_extent = extent->maybe_get_transactional_view(t); + ceph_assert(p_extent); if (p_extent != extent.get()) { assert(!extent->is_pending_io()); assert(p_extent->is_pending_in_trans(t.get_trans_id())); diff --git a/src/crimson/os/seastore/cached_extent.cc b/src/crimson/os/seastore/cached_extent.cc index 85b29ba4e979..8a358d5d4e02 100644 --- a/src/crimson/os/seastore/cached_extent.cc +++ b/src/crimson/os/seastore/cached_extent.cc @@ -74,17 +74,32 @@ CachedExtent::~CachedExtent() parent_index->erase(*this); } } -CachedExtent* CachedExtent::get_transactional_view(Transaction &t) { - return get_transactional_view(t.get_trans_id()); -} +CachedExtent* CachedExtent::maybe_get_transactional_view(Transaction &t) { + if (t.is_weak()) { + return this; + } -CachedExtent* CachedExtent::get_transactional_view(transaction_id_t tid) { - auto it = mutation_pending_extents.find(tid, trans_spec_view_t::cmp_t()); - if (it != mutation_pending_extents.end()) { - return (CachedExtent*)&(*it); - } else { + auto tid = t.get_trans_id(); + if (is_pending()) { + ceph_assert(is_pending_in_trans(tid)); return this; } + + if (!mutation_pending_extents.empty()) { + auto it = mutation_pending_extents.find(tid, trans_spec_view_t::cmp_t()); + if (it != mutation_pending_extents.end()) { + return (CachedExtent*)&(*it); + } + } + + if (!retired_transactions.empty()) { + auto it = retired_transactions.find(tid, trans_spec_view_t::cmp_t()); + if (it != retired_transactions.end()) { + return nullptr; + } + } + + return this; } std::ostream &LogicalCachedExtent::print_detail(std::ostream &out) const diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index 5cf591c35b3e..88dedfb0c072 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -939,8 +939,7 @@ private: } } - CachedExtent* get_transactional_view(Transaction &t); - CachedExtent* get_transactional_view(transaction_id_t tid); + CachedExtent* maybe_get_transactional_view(Transaction &t); read_trans_set_t read_transactions;