From: Zhang Song Date: Wed, 26 Feb 2025 09:58:50 +0000 (+0800) Subject: crimson/os/seastore/btree: move lba/backref_map_val_t to the common header file X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=8c6d82e0c7d6d27a9544d065bc6b9ccec4c6a3cc;p=ceph.git crimson/os/seastore/btree: move lba/backref_map_val_t to the common header file rename btree_range_pin.h to btree_types.h Signed-off-by: Zhang Song --- diff --git a/src/crimson/os/seastore/CMakeLists.txt b/src/crimson/os/seastore/CMakeLists.txt index 1728afed2f922..0a7a11668c8fb 100644 --- a/src/crimson/os/seastore/CMakeLists.txt +++ b/src/crimson/os/seastore/CMakeLists.txt @@ -12,8 +12,8 @@ set(crimson_seastore_srcs root_block.cc lba_manager.cc async_cleaner.cc + btree/btree_types.cc backref_manager.cc - backref/backref_tree_node.cc backref/btree_backref_manager.cc lba_manager/btree/btree_lba_manager.cc lba_manager/btree/lba_btree_node.cc diff --git a/src/crimson/os/seastore/backref/backref_tree_node.cc b/src/crimson/os/seastore/backref/backref_tree_node.cc deleted file mode 100644 index 513c299940db4..0000000000000 --- a/src/crimson/os/seastore/backref/backref_tree_node.cc +++ /dev/null @@ -1,14 +0,0 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- -// vim: ts=8 sw=2 smarttab - -#include "crimson/os/seastore/backref/backref_tree_node.h" - -namespace crimson::os::seastore::backref { - -std::ostream& operator<<(std::ostream &out, const backref_map_val_t& val) { - return out << "backref_map_val_t(" - << val.laddr - << "~" << val.len << ")"; -} - -} // namespace crimson::os::seastore::backref diff --git a/src/crimson/os/seastore/backref/backref_tree_node.h b/src/crimson/os/seastore/backref/backref_tree_node.h index d8e104ee44401..f2cbee243b1e5 100644 --- a/src/crimson/os/seastore/backref/backref_tree_node.h +++ b/src/crimson/os/seastore/backref/backref_tree_node.h @@ -44,42 +44,6 @@ constexpr size_t LEAF_NODE_CAPACITY = 193; using BackrefNode = FixedKVNode; -struct backref_map_val_t { - extent_len_t len = 0; ///< length of extents - laddr_t laddr = L_ADDR_MIN; ///< logical address of extents - extent_types_t type = extent_types_t::ROOT; - - backref_map_val_t() = default; - backref_map_val_t( - extent_len_t len, - laddr_t laddr, - extent_types_t type) - : len(len), laddr(laddr), type(type) {} - - bool operator==(const backref_map_val_t& rhs) const noexcept { - return len == rhs.len && laddr == rhs.laddr; - } -}; - -std::ostream& operator<<(std::ostream &out, const backref_map_val_t& val); - -struct __attribute__((packed)) backref_map_val_le_t { - extent_len_le_t len = init_extent_len_le(0); - laddr_le_t laddr = laddr_le_t(L_ADDR_MIN); - extent_types_le_t type = 0; - - backref_map_val_le_t() = default; - backref_map_val_le_t(const backref_map_val_le_t &) = default; - explicit backref_map_val_le_t(const backref_map_val_t &val) - : len(init_extent_len_le(val.len)), - laddr(val.laddr), - type(extent_types_le_t(val.type)) {} - - operator backref_map_val_t() const { - return backref_map_val_t{len, laddr, (extent_types_t)type}; - } -}; - class BackrefInternalNode : public FixedKVInternalNode< INTERNAL_NODE_CAPACITY, diff --git a/src/crimson/os/seastore/backref_mapping.h b/src/crimson/os/seastore/backref_mapping.h index 0fa84cd9f6668..399983de7bc20 100644 --- a/src/crimson/os/seastore/backref_mapping.h +++ b/src/crimson/os/seastore/backref_mapping.h @@ -3,7 +3,7 @@ #pragma once -#include "crimson/os/seastore/btree/btree_range_pin.h" +#include "crimson/os/seastore/btree/btree_types.h" namespace crimson::os::seastore { diff --git a/src/crimson/os/seastore/btree/btree_range_pin.h b/src/crimson/os/seastore/btree/btree_range_pin.h deleted file mode 100644 index c07dd5bac2e91..0000000000000 --- a/src/crimson/os/seastore/btree/btree_range_pin.h +++ /dev/null @@ -1,103 +0,0 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- -// vim: ts=8 sw=2 smarttab - -#pragma once - -#include - -#include "crimson/common/log.h" - -#include "crimson/os/seastore/cached_extent.h" -#include "crimson/os/seastore/seastore_types.h" -#include "crimson/os/seastore/transaction.h" - -namespace crimson::os::seastore { -class Cache; - -struct op_context_t { - Cache &cache; - Transaction &trans; -}; - -constexpr uint16_t MAX_FIXEDKVBTREE_DEPTH = 8; - -template -struct fixed_kv_node_meta_t { - bound_t begin = min_max_t::min; - bound_t end = min_max_t::min; - depth_t depth = 0; - - bool is_parent_of(const fixed_kv_node_meta_t &other) const { - return (depth == other.depth + 1) && - (begin <= other.begin) && - (end > other.begin); - } - - bool is_in_range(const bound_t key) const { - return begin <= key && end > key; - } - - std::pair split_into(bound_t pivot) const { - return std::make_pair( - fixed_kv_node_meta_t{begin, pivot, depth}, - fixed_kv_node_meta_t{pivot, end, depth}); - } - - static fixed_kv_node_meta_t merge_from( - const fixed_kv_node_meta_t &lhs, const fixed_kv_node_meta_t &rhs) { - ceph_assert(lhs.depth == rhs.depth); - return fixed_kv_node_meta_t{lhs.begin, rhs.end, lhs.depth}; - } - - static std::pair - rebalance(const fixed_kv_node_meta_t &lhs, const fixed_kv_node_meta_t &rhs, bound_t pivot) { - ceph_assert(lhs.depth == rhs.depth); - return std::make_pair( - fixed_kv_node_meta_t{lhs.begin, pivot, lhs.depth}, - fixed_kv_node_meta_t{pivot, rhs.end, lhs.depth}); - } - - bool is_root() const { - return begin == min_max_t::min && end == min_max_t::max; - } -}; - -template -inline std::ostream &operator<<( - std::ostream &lhs, - const fixed_kv_node_meta_t &rhs) -{ - return lhs << "btree_node_meta_t(" - << "begin=" << rhs.begin - << ", end=" << rhs.end - << ", depth=" << rhs.depth - << ")"; -} - -/** - * fixed_kv_node_meta_le_t - * - * On disk layout for fixed_kv_node_meta_t - */ -template -struct __attribute__((packed)) fixed_kv_node_meta_le_t { - bound_le_t begin = bound_le_t(0); - bound_le_t end = bound_le_t(0); - depth_le_t depth = init_depth_le(0); - - fixed_kv_node_meta_le_t() = default; - fixed_kv_node_meta_le_t( - const fixed_kv_node_meta_le_t &) = default; - explicit fixed_kv_node_meta_le_t( - const fixed_kv_node_meta_t &val) - : begin(val.begin), - end(val.end), - depth(init_depth_le(val.depth)) {} - - operator fixed_kv_node_meta_t() const { - return fixed_kv_node_meta_t{ - begin, end, depth }; - } -}; - -} diff --git a/src/crimson/os/seastore/btree/btree_types.cc b/src/crimson/os/seastore/btree/btree_types.cc new file mode 100644 index 0000000000000..61f50e574916a --- /dev/null +++ b/src/crimson/os/seastore/btree/btree_types.cc @@ -0,0 +1,32 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#include "crimson/os/seastore/btree/btree_types.h" + +namespace crimson::os::seastore { + +namespace lba_manager::btree { + +std::ostream& operator<<(std::ostream& out, const lba_map_val_t& v) +{ + return out << "lba_map_val_t(" + << v.pladdr + << "~0x" << std::hex << v.len + << ", checksum=0x" << v.checksum + << ", refcount=" << std::dec << v.refcount + << ")"; +} + +} // namespace lba_manager::btree + +namespace backref { + +std::ostream& operator<<(std::ostream &out, const backref_map_val_t& val) { + return out << "backref_map_val_t(" + << val.laddr + << "~0x" << std::hex << val.len << std::dec + << ")"; +} + +} // namespace backref +} // namespace crimson::os::seastore diff --git a/src/crimson/os/seastore/btree/btree_types.h b/src/crimson/os/seastore/btree/btree_types.h new file mode 100644 index 0000000000000..1c850a31cd062 --- /dev/null +++ b/src/crimson/os/seastore/btree/btree_types.h @@ -0,0 +1,195 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#pragma once + +#include + +#include "crimson/common/log.h" + +#include "crimson/os/seastore/cached_extent.h" +#include "crimson/os/seastore/seastore_types.h" +#include "crimson/os/seastore/transaction.h" + +namespace crimson::os::seastore { +class Cache; + +struct op_context_t { + Cache &cache; + Transaction &trans; +}; + +constexpr uint16_t MAX_FIXEDKVBTREE_DEPTH = 8; + +template +struct fixed_kv_node_meta_t { + bound_t begin = min_max_t::min; + bound_t end = min_max_t::min; + depth_t depth = 0; + + bool is_parent_of(const fixed_kv_node_meta_t &other) const { + return (depth == other.depth + 1) && + (begin <= other.begin) && + (end > other.begin); + } + + bool is_in_range(const bound_t key) const { + return begin <= key && end > key; + } + + std::pair split_into(bound_t pivot) const { + return std::make_pair( + fixed_kv_node_meta_t{begin, pivot, depth}, + fixed_kv_node_meta_t{pivot, end, depth}); + } + + static fixed_kv_node_meta_t merge_from( + const fixed_kv_node_meta_t &lhs, const fixed_kv_node_meta_t &rhs) { + ceph_assert(lhs.depth == rhs.depth); + return fixed_kv_node_meta_t{lhs.begin, rhs.end, lhs.depth}; + } + + static std::pair + rebalance(const fixed_kv_node_meta_t &lhs, const fixed_kv_node_meta_t &rhs, bound_t pivot) { + ceph_assert(lhs.depth == rhs.depth); + return std::make_pair( + fixed_kv_node_meta_t{lhs.begin, pivot, lhs.depth}, + fixed_kv_node_meta_t{pivot, rhs.end, lhs.depth}); + } + + bool is_root() const { + return begin == min_max_t::min && end == min_max_t::max; + } +}; + +template +inline std::ostream &operator<<( + std::ostream &lhs, + const fixed_kv_node_meta_t &rhs) +{ + return lhs << "btree_node_meta_t(" + << "begin=" << rhs.begin + << ", end=" << rhs.end + << ", depth=" << rhs.depth + << ")"; +} + +/** + * fixed_kv_node_meta_le_t + * + * On disk layout for fixed_kv_node_meta_t + */ +template +struct __attribute__((packed)) fixed_kv_node_meta_le_t { + bound_le_t begin = bound_le_t(0); + bound_le_t end = bound_le_t(0); + depth_le_t depth = init_depth_le(0); + + fixed_kv_node_meta_le_t() = default; + fixed_kv_node_meta_le_t( + const fixed_kv_node_meta_le_t &) = default; + explicit fixed_kv_node_meta_le_t( + const fixed_kv_node_meta_t &val) + : begin(val.begin), + end(val.end), + depth(init_depth_le(val.depth)) {} + + operator fixed_kv_node_meta_t() const { + return fixed_kv_node_meta_t{ + begin, end, depth }; + } +}; + +namespace lba_manager::btree { + +/** + * lba_map_val_t + * + * struct representing a single lba mapping + */ +struct lba_map_val_t { + extent_len_t len = 0; ///< length of mapping + pladdr_t pladdr; ///< direct addr of mapping or + // laddr of a direct lba mapping(see btree_lba_manager.h) + extent_ref_count_t refcount = 0; ///< refcount + checksum_t checksum = 0; ///< checksum of original block written at paddr (TODO) + + lba_map_val_t() = default; + lba_map_val_t( + extent_len_t len, + pladdr_t pladdr, + extent_ref_count_t refcount, + checksum_t checksum) + : len(len), pladdr(pladdr), refcount(refcount), checksum(checksum) {} + bool operator==(const lba_map_val_t&) const = default; +}; + +std::ostream& operator<<(std::ostream& out, const lba_map_val_t&); + +/** + * lba_map_val_le_t + * + * On disk layout for lba_map_val_t. + */ +struct __attribute__((packed)) lba_map_val_le_t { + extent_len_le_t len = init_extent_len_le(0); + pladdr_le_t pladdr; + extent_ref_count_le_t refcount{0}; + checksum_le_t checksum{0}; + + lba_map_val_le_t() = default; + lba_map_val_le_t(const lba_map_val_le_t &) = default; + explicit lba_map_val_le_t(const lba_map_val_t &val) + : len(init_extent_len_le(val.len)), + pladdr(pladdr_le_t(val.pladdr)), + refcount(val.refcount), + checksum(val.checksum) {} + + operator lba_map_val_t() const { + return lba_map_val_t{ len, pladdr, refcount, checksum }; + } +}; + +} // namespace lba_manager::btree + +namespace backref { + +struct backref_map_val_t { + extent_len_t len = 0; ///< length of extents + laddr_t laddr = L_ADDR_MIN; ///< logical address of extents + extent_types_t type = extent_types_t::NONE; + + backref_map_val_t() = default; + backref_map_val_t( + extent_len_t len, + laddr_t laddr, + extent_types_t type) + : len(len), laddr(laddr), type(type) {} + + bool operator==(const backref_map_val_t& rhs) const noexcept { + return len == rhs.len && laddr == rhs.laddr; + } +}; + +std::ostream& operator<<(std::ostream &out, const backref_map_val_t& val); + +struct __attribute__((packed)) backref_map_val_le_t { + extent_len_le_t len = init_extent_len_le(0); + laddr_le_t laddr = laddr_le_t(L_ADDR_MIN); + extent_types_le_t type = 0; + + backref_map_val_le_t() = default; + backref_map_val_le_t(const backref_map_val_le_t &) = default; + explicit backref_map_val_le_t(const backref_map_val_t &val) + : len(init_extent_len_le(val.len)), + laddr(val.laddr), + type(extent_types_le_t(val.type)) {} + + operator backref_map_val_t() const { + return backref_map_val_t{len, laddr, (extent_types_t)type}; + } +}; + +} // namespace backerf + +} // namespace crimson::os::seastore diff --git a/src/crimson/os/seastore/btree/fixed_kv_btree.h b/src/crimson/os/seastore/btree/fixed_kv_btree.h index 2cf89346bbb75..08e2637105429 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_btree.h +++ b/src/crimson/os/seastore/btree/fixed_kv_btree.h @@ -12,14 +12,10 @@ #include "crimson/os/seastore/cache.h" #include "crimson/os/seastore/seastore_types.h" -#include "crimson/os/seastore/btree/btree_range_pin.h" +#include "crimson/os/seastore/btree/btree_types.h" #include "crimson/os/seastore/root_block.h" #include "crimson/os/seastore/linked_tree_node.h" -namespace crimson::os::seastore::lba_manager::btree { -struct lba_map_val_t; -} - namespace crimson::os::seastore { template diff --git a/src/crimson/os/seastore/btree/fixed_kv_node.h b/src/crimson/os/seastore/btree/fixed_kv_node.h index fc1bdbb5da603..6bfb825fa8c55 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_node.h +++ b/src/crimson/os/seastore/btree/fixed_kv_node.h @@ -16,7 +16,7 @@ #include "crimson/os/seastore/cache.h" #include "crimson/os/seastore/cached_extent.h" -#include "crimson/os/seastore/btree/btree_range_pin.h" +#include "crimson/os/seastore/btree/btree_types.h" #include "crimson/os/seastore/btree/fixed_kv_btree.h" #include "crimson/os/seastore/root_block.h" 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 32261b6e79f42..0738f984c7f18 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 @@ -21,7 +21,7 @@ #include "crimson/os/seastore/cache.h" #include "crimson/os/seastore/lba_manager/btree/lba_btree_node.h" -#include "crimson/os/seastore/btree/btree_range_pin.h" +#include "crimson/os/seastore/btree/btree_types.h" namespace crimson::os::seastore { class LogicalCachedExtent; diff --git a/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.cc b/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.cc index 14ac8af400355..429a07afcb8c0 100644 --- a/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.cc +++ b/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.cc @@ -18,16 +18,6 @@ SET_SUBSYS(seastore_lba); namespace crimson::os::seastore::lba_manager::btree { -std::ostream& operator<<(std::ostream& out, const lba_map_val_t& v) -{ - return out << "lba_map_val_t(" - << v.pladdr - << "~" << v.len - << ", refcount=" << v.refcount - << ", checksum=" << v.checksum - << ")"; -} - std::ostream &LBALeafNode::print_detail(std::ostream &out) const { out << ", size=" << this->get_size() diff --git a/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.h b/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.h index daef8e6a4fa51..456c025cb41f2 100644 --- a/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.h +++ b/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.h @@ -16,7 +16,7 @@ #include "crimson/os/seastore/cache.h" #include "crimson/os/seastore/cached_extent.h" -#include "crimson/os/seastore/btree/btree_range_pin.h" +#include "crimson/os/seastore/btree/btree_types.h" #include "crimson/os/seastore/btree/fixed_kv_btree.h" #include "crimson/os/seastore/btree/fixed_kv_node.h" @@ -31,30 +31,6 @@ using LBANode = FixedKVNode; class BtreeLBAMapping; -/** - * lba_map_val_t - * - * struct representing a single lba mapping - */ -struct lba_map_val_t { - extent_len_t len = 0; ///< length of mapping - pladdr_t pladdr; ///< physical addr of mapping or - // laddr of a physical lba mapping(see btree_lba_manager.h) - extent_ref_count_t refcount = 0; ///< refcount - uint32_t checksum = 0; ///< checksum of original block written at paddr (TODO) - - lba_map_val_t() = default; - lba_map_val_t( - extent_len_t len, - pladdr_t pladdr, - extent_ref_count_t refcount, - uint32_t checksum) - : len(len), pladdr(pladdr), refcount(refcount), checksum(checksum) {} - bool operator==(const lba_map_val_t&) const = default; -}; - -std::ostream& operator<<(std::ostream& out, const lba_map_val_t&); - constexpr size_t LBA_BLOCK_SIZE = 4096; using lba_node_meta_t = fixed_kv_node_meta_t; @@ -123,30 +99,6 @@ using LBAInternalNodeRef = LBAInternalNode::Ref; */ constexpr size_t LEAF_NODE_CAPACITY = 140; -/** - * lba_map_val_le_t - * - * On disk layout for lba_map_val_t. - */ -struct __attribute__((packed)) lba_map_val_le_t { - extent_len_le_t len = init_extent_len_le(0); - pladdr_le_t pladdr; - extent_ref_count_le_t refcount{0}; - ceph_le32 checksum{0}; - - lba_map_val_le_t() = default; - lba_map_val_le_t(const lba_map_val_le_t &) = default; - explicit lba_map_val_le_t(const lba_map_val_t &val) - : len(init_extent_len_le(val.len)), - pladdr(pladdr_le_t(val.pladdr)), - refcount(val.refcount), - checksum(val.checksum) {} - - operator lba_map_val_t() const { - return lba_map_val_t{ len, pladdr, refcount, checksum }; - } -}; - struct LBALeafNode : FixedKVLeafNode< LEAF_NODE_CAPACITY, diff --git a/src/crimson/os/seastore/lba_mapping.h b/src/crimson/os/seastore/lba_mapping.h index ec79c57da43ca..c913bcb10ec0c 100644 --- a/src/crimson/os/seastore/lba_mapping.h +++ b/src/crimson/os/seastore/lba_mapping.h @@ -4,7 +4,7 @@ #pragma once #include "crimson/os/seastore/cached_extent.h" -#include "crimson/os/seastore/btree/btree_range_pin.h" +#include "crimson/os/seastore/btree/btree_types.h" #include "crimson/os/seastore/lba_manager/btree/lba_btree_node.h" #include "crimson/os/seastore/logical_child_node.h" diff --git a/src/crimson/os/seastore/logical_child_node.h b/src/crimson/os/seastore/logical_child_node.h index 1c5ef01ba0a12..ab4f2e67262c8 100644 --- a/src/crimson/os/seastore/logical_child_node.h +++ b/src/crimson/os/seastore/logical_child_node.h @@ -5,7 +5,7 @@ #include "crimson/os/seastore/cached_extent.h" #include "crimson/os/seastore/linked_tree_node.h" -#include "crimson/os/seastore/btree/btree_range_pin.h" +#include "crimson/os/seastore/btree/btree_types.h" #include "crimson/os/seastore/lba_manager/btree/lba_btree_node.h" namespace crimson::os::seastore { diff --git a/src/crimson/os/seastore/seastore_types.h b/src/crimson/os/seastore/seastore_types.h index ff2c8172f8c5a..74c2e2f404a21 100644 --- a/src/crimson/os/seastore/seastore_types.h +++ b/src/crimson/os/seastore/seastore_types.h @@ -74,6 +74,7 @@ inline depth_le_t init_depth_le(uint32_t i) { } using checksum_t = uint32_t; +using checksum_le_t = ceph_le32; constexpr checksum_t CRC_NULL = 0; // Immutable metadata for seastore to set at mkfs time