]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/FixedKVBtree: return BtreeCursor instead of BtreeMapping
authorZhang Song <zhangsong02@qianxin.com>
Thu, 10 Apr 2025 03:18:01 +0000 (11:18 +0800)
committerMatan Breizman <mbreizma@redhat.com>
Sun, 8 Jun 2025 07:02:03 +0000 (10:02 +0300)
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
(cherry picked from commit 84cb3d8ae44ddbf20a02f056141a7cd132de4d16)

src/crimson/os/seastore/backref/btree_backref_manager.h
src/crimson/os/seastore/btree/fixed_kv_btree.h
src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc
src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h

index e0ad8f93bd223ee746201708e334e937030695ac..b7d84845c3303f557ce6f8c3107e58c047305547 100644 (file)
@@ -31,7 +31,7 @@ constexpr size_t BACKREF_BLOCK_SIZE = 4096;
 
 using BackrefBtree = FixedKVBtree<
   paddr_t, backref_map_val_t, BackrefInternalNode,
-  BackrefLeafNode, BtreeBackrefMapping, BACKREF_BLOCK_SIZE>;
+  BackrefLeafNode, BackrefCursor, BACKREF_BLOCK_SIZE>;
 
 class BtreeBackrefManager : public BackrefManager {
 public:
index 08e2637105429f4c637c4b19801eeb3689e1199f..f9ca41863290ffe660e085bf3acf20a627d932da 100644 (file)
@@ -37,7 +37,7 @@ template <
   typename node_val_t,
   typename internal_node_t,
   typename leaf_node_t,
-  typename pin_t,
+  typename cursor_t,
   size_t node_size>
 class FixedKVBtree {
   static constexpr size_t MAX_DEPTH = 16;
@@ -46,7 +46,7 @@ class FixedKVBtree {
     node_val_t,
     internal_node_t,
     leaf_node_t,
-    pin_t,
+    cursor_t,
     node_size>;
 public:
   using InternalNodeRef = TCachedExtentRef<internal_node_t>;
@@ -201,22 +201,15 @@ public:
       return leaf.pos == 0;
     }
 
-    std::unique_ptr<pin_t> get_pin(op_context_t ctx) const {
+    std::unique_ptr<cursor_t> get_cursor(op_context_t ctx) const {
       assert(!is_end());
-      auto val = get_val();
-      auto key = get_key();
-      node_key_t end{};
-      if constexpr (std::is_same_v<node_key_t, laddr_t>) {
-        end = (key + val.len).checked_to_laddr();
-      } else {
-        end = key + val.len;
-      }
-      return std::make_unique<pin_t>(
+      return std::make_unique<cursor_t>(
         ctx,
        leaf.node,
-        leaf.pos,
-       val,
-       fixed_kv_node_meta_t<node_key_t>{ key, end, 0 });
+        leaf.node->modifications,
+        get_key(),
+        std::make_optional(get_val()),
+        leaf.pos);
     }
 
     typename leaf_node_t::Ref get_leaf_node() {
@@ -2144,7 +2137,7 @@ template <
   typename node_val_t,
   typename internal_node_t,
   typename leaf_node_t,
-  typename pin_t,
+  typename cursor_t,
   size_t node_size>
 struct is_fixed_kv_tree<
   FixedKVBtree<
@@ -2152,7 +2145,7 @@ struct is_fixed_kv_tree<
     node_val_t,
     internal_node_t,
     leaf_node_t,
-    pin_t,
+    cursor_t,
     node_size>> : std::true_type {};
 
 template <
index 3dacacbc2590deef0b396cafb679daf38b014923..cb0a7f61fbdd666ca8a6001a7992be97da513ddb 100644 (file)
@@ -483,7 +483,7 @@ _init_cached_extent(
          iter.get_val().pladdr.get_paddr() == logn->get_paddr()) {
        assert(!iter.get_leaf_node()->is_pending());
        iter.get_leaf_node()->link_child(logn.get(), iter.get_leaf_pos());
-       logn->set_laddr(iter.get_pin(c)->get_key());
+       logn->set_laddr(iter.get_key());
        ceph_assert(iter.get_val().len == e->get_length());
        DEBUGT("logical extent {} live", c.trans, *logn);
        ret = true;
index 0738f984c7f188a8376955851f41b0e2f06cf8fd..6b265326d24f7c3bcc3eb221ef44100c32e92454 100644 (file)
@@ -231,7 +231,7 @@ using BtreeLBAMappingRef = std::unique_ptr<BtreeLBAMapping>;
 
 using LBABtree = FixedKVBtree<
   laddr_t, lba_map_val_t, LBAInternalNode,
-  LBALeafNode, BtreeLBAMapping, LBA_BLOCK_SIZE>;
+  LBALeafNode, LBACursor, LBA_BLOCK_SIZE>;
 
 /**
  * BtreeLBAManager