From c0cd12c21771b6692bdf7c192aaf01284776bbaa Mon Sep 17 00:00:00 2001 From: Zhang Song Date: Thu, 10 Apr 2025 11:15:11 +0800 Subject: [PATCH] crimson/os/seastore: remove PhysicalNodeMapping and BtreeNodeMapping Signed-off-by: Zhang Song (cherry picked from commit 3c4d047e1ed8d798aa83f156152fcbbef7e84ce9) --- .../seastore/backref/btree_backref_manager.h | 2 - src/crimson/os/seastore/backref_mapping.h | 44 ++++++++-- .../os/seastore/btree/btree_range_pin.h | 83 ------------------- src/crimson/os/seastore/cached_extent.h | 38 +-------- src/crimson/os/seastore/lba_mapping.h | 68 +++++++++++++-- 5 files changed, 101 insertions(+), 134 deletions(-) diff --git a/src/crimson/os/seastore/backref/btree_backref_manager.h b/src/crimson/os/seastore/backref/btree_backref_manager.h index 1f8107834fc97..e0ad8f93bd223 100644 --- a/src/crimson/os/seastore/backref/btree_backref_manager.h +++ b/src/crimson/os/seastore/backref/btree_backref_manager.h @@ -11,8 +11,6 @@ namespace crimson::os::seastore::backref { class BtreeBackrefMapping : public BackrefMapping { public: - BtreeBackrefMapping(op_context_t ctx) - : BackrefMapping(ctx) {} BtreeBackrefMapping( op_context_t ctx, BackrefLeafNodeRef parent, diff --git a/src/crimson/os/seastore/backref_mapping.h b/src/crimson/os/seastore/backref_mapping.h index 053ae20185295..0fa84cd9f6668 100644 --- a/src/crimson/os/seastore/backref_mapping.h +++ b/src/crimson/os/seastore/backref_mapping.h @@ -7,15 +7,45 @@ namespace crimson::os::seastore { -class BackrefMapping : public BtreeNodeMapping { +class BackrefMapping { + op_context_t ctx; + CachedExtentRef parent; + fixed_kv_node_meta_t range; + laddr_t value; + extent_len_t len = 0; + uint16_t pos = std::numeric_limits::max(); extent_types_t type; public: - BackrefMapping(op_context_t ctx) - : BtreeNodeMapping(ctx) {} - template - BackrefMapping(extent_types_t type, T&&... t) - : BtreeNodeMapping(std::forward(t)...), - type(type) {} + BackrefMapping( + extent_types_t type, + op_context_t ctx, + CachedExtentRef parent, + uint16_t pos, + laddr_t value, + extent_len_t len, + fixed_kv_node_meta_t meta) + : ctx(ctx), + parent(parent), + range(meta), + value(value), + len(len), + pos(pos), + type(type) + {} + + extent_len_t get_length() const { + ceph_assert(range.end > range.begin); + return len; + } + + laddr_t get_val() const { + return value; + } + + paddr_t get_key() const { + return range.begin; + } + extent_types_t get_type() const { return type; } diff --git a/src/crimson/os/seastore/btree/btree_range_pin.h b/src/crimson/os/seastore/btree/btree_range_pin.h index bfc0e8e548048..c07dd5bac2e91 100644 --- a/src/crimson/os/seastore/btree/btree_range_pin.h +++ b/src/crimson/os/seastore/btree/btree_range_pin.h @@ -100,87 +100,4 @@ struct __attribute__((packed)) fixed_kv_node_meta_le_t { } }; -template -class BtreeNodeMapping : public PhysicalNodeMapping { -protected: - op_context_t ctx; - /** - * parent - * - * populated until link_extent is called to ensure cache residence - * until add_pin is called. - */ - CachedExtentRef parent; - - pladdr_t value; - extent_len_t len = 0; - fixed_kv_node_meta_t range; - uint16_t pos = std::numeric_limits::max(); - fixed_kv_node_meta_t _get_pin_range() const { - return range; - } - -public: - using val_type = val_t; - BtreeNodeMapping(op_context_t ctx) : ctx(ctx) {} - - BtreeNodeMapping( - op_context_t ctx, - CachedExtentRef parent, - uint16_t pos, - pladdr_t value, - extent_len_t len, - fixed_kv_node_meta_t meta) - : ctx(ctx), - parent(parent), - value(value), - len(len), - range(meta), - pos(pos) - {} - - CachedExtentRef get_parent() const final { - return parent; - } - - CachedExtentRef get_parent() { - return parent; - } - - uint16_t get_pos() const final { - return pos; - } - - extent_len_t get_length() const final { - ceph_assert(range.end > range.begin); - return len; - } - - val_t get_val() const final { - if constexpr (std::is_same_v) { - return value.get_paddr(); - } else { - static_assert(std::is_same_v); - return value.get_laddr(); - } - } - - key_t get_key() const override { - return range.begin; - } - - bool has_been_invalidated() const final { - return parent->has_been_invalidated(); - } - - bool is_parent_viewable() const final { - ceph_assert(parent); - return parent->is_viewable_by_trans(ctx.trans).first; - } - bool is_parent_valid() const final { - ceph_assert(parent); - return parent->is_valid(); - } -}; - } diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index 24d442fbdc9f1..02730f9ad625d 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -1110,8 +1110,7 @@ protected: friend class crimson::os::seastore::SegmentedAllocator; friend class crimson::os::seastore::TransactionManager; friend class crimson::os::seastore::ExtentPlacementManager; - template - friend class BtreeNodeMapping; + friend class LBAMapping; friend class ::btree_lba_manager_test; friend class ::lba_btree_test; friend class ::btree_test_base; @@ -1313,41 +1312,6 @@ private: uint64_t bytes = 0; }; -template -class PhysicalNodeMapping; - -template -using PhysicalNodeMappingRef = std::unique_ptr>; - -template -class PhysicalNodeMapping { -public: - PhysicalNodeMapping() = default; - PhysicalNodeMapping(const PhysicalNodeMapping&) = delete; - virtual extent_len_t get_length() const = 0; - virtual val_t get_val() const = 0; - virtual key_t get_key() const = 0; - virtual bool has_been_invalidated() const = 0; - virtual CachedExtentRef get_parent() const = 0; - virtual uint16_t get_pos() const = 0; - virtual uint32_t get_checksum() const { - ceph_abort("impossible"); - return 0; - } - virtual bool is_parent_viewable() const = 0; - virtual bool is_parent_valid() const = 0; - virtual bool parent_modified() const { - ceph_abort("impossible"); - return false; - }; - - virtual void maybe_fix_pos() { - ceph_abort("impossible"); - } - - virtual ~PhysicalNodeMapping() {} -}; - /** * RetiredExtentPlaceholder * diff --git a/src/crimson/os/seastore/lba_mapping.h b/src/crimson/os/seastore/lba_mapping.h index 73a44f35de34c..1f3d4d53233d9 100644 --- a/src/crimson/os/seastore/lba_mapping.h +++ b/src/crimson/os/seastore/lba_mapping.h @@ -15,15 +15,64 @@ using LBAMappingRef = std::unique_ptr; class LogicalCachedExtent; -class LBAMapping : public BtreeNodeMapping { +class LBAMapping { public: LBAMapping(op_context_t ctx) - : BtreeNodeMapping(ctx) {} - template - LBAMapping(T&&... t) - : BtreeNodeMapping(std::forward(t)...) + : ctx(ctx) {} + LBAMapping( + op_context_t ctx, + CachedExtentRef parent, + uint16_t pos, + pladdr_t value, + extent_len_t len, + fixed_kv_node_meta_t meta) + : ctx(ctx), + parent(parent), + value(value), + len(len), + range(meta), + pos(pos) {} + CachedExtentRef get_parent() { + return parent; + } + + uint16_t get_pos() const { + return pos; + } + + extent_len_t get_length() const { + ceph_assert(range.end > range.begin); + return len; + } + + paddr_t get_val() const { + return value.get_paddr(); + } + + virtual laddr_t get_key() const { + return range.begin; + } + + bool has_been_invalidated() const { + return parent->has_been_invalidated(); + } + + bool is_parent_viewable() const { + ceph_assert(parent); + return parent->is_viewable_by_trans(ctx.trans).first; + } + + bool is_parent_valid() const { + ceph_assert(parent); + return parent->is_valid(); + } + + virtual void maybe_fix_pos() = 0; + virtual bool parent_modified() const = 0; + virtual uint32_t get_checksum() const = 0; + // An lba pin may be indirect, see comments in lba_manager/btree/btree_lba_manager.h virtual bool is_indirect() const = 0; virtual laddr_t get_intermediate_key() const = 0; @@ -55,6 +104,15 @@ public: virtual ~LBAMapping() {} protected: virtual LBAMappingRef _duplicate(op_context_t) const = 0; + + op_context_t ctx; + CachedExtentRef parent; + + pladdr_t value; + extent_len_t len = 0; + fixed_kv_node_meta_t range; + uint16_t pos = std::numeric_limits::max(); + std::optional> child_pos = std::nullopt; }; -- 2.39.5