]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/cached_extent: rename get_transactional_view to
authorXuehan Xu <xuxuehan@qianxin.com>
Sun, 3 Aug 2025 08:43:12 +0000 (16:43 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Tue, 12 Aug 2025 05:43:25 +0000 (13:43 +0800)
maybe_get_transactional_view

It returns nullptr if the extent is not viewable by the transaction

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

index 06f23c8f3d290ee04606b60ae468b36715e49df6..bf712d3eccccd07bc1526f6ad627a45187774a97 100644 (file)
@@ -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()));
index 85b29ba4e979dd8144512964ca16286b39cc38ef..8a358d5d4e027e155e6c5c802cf3a2f3c4e6088f 100644 (file)
@@ -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
index 5cf591c35b3e2a68e96f0cc2211d019100975ecb..88dedfb0c072dab798001dd8b74c5e00dfe2accf 100644 (file)
@@ -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<Transaction> read_transactions;