From: Zhang Song Date: Thu, 10 Apr 2025 03:18:01 +0000 (+0800) Subject: crimson/os/seastore/FixedKVBtree: return BtreeCursor instead of BtreeMapping X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=a80c4d4bcc5137acef3fd013eb9bd966d489dc15;p=ceph.git crimson/os/seastore/FixedKVBtree: return BtreeCursor instead of BtreeMapping Signed-off-by: Zhang Song (cherry picked from commit 84cb3d8ae44ddbf20a02f056141a7cd132de4d16) --- diff --git a/src/crimson/os/seastore/backref/btree_backref_manager.h b/src/crimson/os/seastore/backref/btree_backref_manager.h index e0ad8f93bd223..b7d84845c3303 100644 --- a/src/crimson/os/seastore/backref/btree_backref_manager.h +++ b/src/crimson/os/seastore/backref/btree_backref_manager.h @@ -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: diff --git a/src/crimson/os/seastore/btree/fixed_kv_btree.h b/src/crimson/os/seastore/btree/fixed_kv_btree.h index 08e2637105429..f9ca41863290f 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_btree.h +++ b/src/crimson/os/seastore/btree/fixed_kv_btree.h @@ -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; @@ -201,22 +201,15 @@ public: return leaf.pos == 0; } - std::unique_ptr get_pin(op_context_t ctx) const { + std::unique_ptr 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) { - end = (key + val.len).checked_to_laddr(); - } else { - end = key + val.len; - } - return std::make_unique( + return std::make_unique( ctx, leaf.node, - leaf.pos, - val, - fixed_kv_node_meta_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 < diff --git a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc index 3dacacbc2590d..cb0a7f61fbdd6 100644 --- a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc +++ b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc @@ -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; diff --git a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h index 0738f984c7f18..6b265326d24f7 100644 --- a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h +++ b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h @@ -231,7 +231,7 @@ using BtreeLBAMappingRef = std::unique_ptr; using LBABtree = FixedKVBtree< laddr_t, lba_map_val_t, LBAInternalNode, - LBALeafNode, BtreeLBAMapping, LBA_BLOCK_SIZE>; + LBALeafNode, LBACursor, LBA_BLOCK_SIZE>; /** * BtreeLBAManager