]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/btree: move lba/backref_map_val_t to the common header file
authorZhang Song <zhangsong02@qianxin.com>
Wed, 26 Feb 2025 09:58:50 +0000 (17:58 +0800)
committerzs <zs@ijk.dev>
Tue, 20 May 2025 06:28:00 +0000 (14:28 +0800)
rename btree_range_pin.h to btree_types.h

Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
15 files changed:
src/crimson/os/seastore/CMakeLists.txt
src/crimson/os/seastore/backref/backref_tree_node.cc [deleted file]
src/crimson/os/seastore/backref/backref_tree_node.h
src/crimson/os/seastore/backref_mapping.h
src/crimson/os/seastore/btree/btree_range_pin.h [deleted file]
src/crimson/os/seastore/btree/btree_types.cc [new file with mode: 0644]
src/crimson/os/seastore/btree/btree_types.h [new file with mode: 0644]
src/crimson/os/seastore/btree/fixed_kv_btree.h
src/crimson/os/seastore/btree/fixed_kv_node.h
src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h
src/crimson/os/seastore/lba_manager/btree/lba_btree_node.cc
src/crimson/os/seastore/lba_manager/btree/lba_btree_node.h
src/crimson/os/seastore/lba_mapping.h
src/crimson/os/seastore/logical_child_node.h
src/crimson/os/seastore/seastore_types.h

index 1728afed2f92236a6a59a77cd3e7be1cbca7a47d..0a7a11668c8fb7b26c9023911cc40cbc30a897f7 100644 (file)
@@ -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 (file)
index 513c299..0000000
+++ /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
index d8e104ee44401572f4585781662b7312b2e4ce38..f2cbee243b1e56e3122af382c20ed25c2e8a29bb 100644 (file)
@@ -44,42 +44,6 @@ constexpr size_t LEAF_NODE_CAPACITY = 193;
 
 using BackrefNode = FixedKVNode<paddr_t>;
 
-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,
index 0fa84cd9f66689db07646dc828b872238b944c09..399983de7bc20502a1d3d317ad5c69db207d8361 100644 (file)
@@ -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 (file)
index c07dd5b..0000000
+++ /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 <boost/intrusive/set.hpp>
-
-#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 <typename bound_t>
-struct fixed_kv_node_meta_t {
-  bound_t begin = min_max_t<bound_t>::min;
-  bound_t end = min_max_t<bound_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<fixed_kv_node_meta_t, fixed_kv_node_meta_t> 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<fixed_kv_node_meta_t, fixed_kv_node_meta_t>
-  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<bound_t>::min && end == min_max_t<bound_t>::max;
-  }
-};
-
-template <typename bound_t>
-inline std::ostream &operator<<(
-  std::ostream &lhs,
-  const fixed_kv_node_meta_t<bound_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 <typename bound_le_t>
-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<bound_le_t> &) = default;
-  explicit fixed_kv_node_meta_le_t(
-    const fixed_kv_node_meta_t<typename bound_le_t::orig_type> &val)
-    : begin(val.begin),
-      end(val.end),
-      depth(init_depth_le(val.depth)) {}
-
-  operator fixed_kv_node_meta_t<typename bound_le_t::orig_type>() const {
-    return fixed_kv_node_meta_t<typename bound_le_t::orig_type>{
-           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 (file)
index 0000000..61f50e5
--- /dev/null
@@ -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 (file)
index 0000000..1c850a3
--- /dev/null
@@ -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 <boost/intrusive/set.hpp>
+
+#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 <typename bound_t>
+struct fixed_kv_node_meta_t {
+  bound_t begin = min_max_t<bound_t>::min;
+  bound_t end = min_max_t<bound_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<fixed_kv_node_meta_t, fixed_kv_node_meta_t> 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<fixed_kv_node_meta_t, fixed_kv_node_meta_t>
+  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<bound_t>::min && end == min_max_t<bound_t>::max;
+  }
+};
+
+template <typename bound_t>
+inline std::ostream &operator<<(
+  std::ostream &lhs,
+  const fixed_kv_node_meta_t<bound_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 <typename bound_le_t>
+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<bound_le_t> &) = default;
+  explicit fixed_kv_node_meta_le_t(
+    const fixed_kv_node_meta_t<typename bound_le_t::orig_type> &val)
+    : begin(val.begin),
+      end(val.end),
+      depth(init_depth_le(val.depth)) {}
+
+  operator fixed_kv_node_meta_t<typename bound_le_t::orig_type>() const {
+    return fixed_kv_node_meta_t<typename bound_le_t::orig_type>{
+           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
index 2cf89346bbb75cbb695f5753f8820d0fbf9a9218..08e2637105429f4c637c4b19801eeb3689e1199f 100644 (file)
 
 #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 <typename T>
index fc1bdbb5da603351358d91ca1154bbc3d4a349f6..6bfb825fa8c5527e4bd81c55510191441584e69f 100644 (file)
@@ -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"
 
index 32261b6e79f42685c4c9a87a3a145f055c4abb9e..0738f984c7f188a8376955851f41b0e2f06cf8fd 100644 (file)
@@ -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;
index 14ac8af4003554753de8a08c95fb34dba02f8683..429a07afcb8c0acd4878437b8bb74936b307d036 100644 (file)
@@ -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()
index daef8e6a4fa51ad15a80f576c23f0846612208fb..456c025cb41f288f7ccd9963437c5d4cff11e863 100644 (file)
@@ -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<laddr_t>;
 
 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<laddr_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,
index ec79c57da43cafcdf881a46ab93633d202d07396..c913bcb10ec0c9296a6005b2dc85a3f79c85d967 100644 (file)
@@ -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"
 
index 1c5ef01ba0a12a47ee4011cd19a5bbd28add4655..ab4f2e67262c88f2b6ba4a544d88e551ee18b3f3 100644 (file)
@@ -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 {
index ff2c8172f8c5acb3f0beed40215dc91b07c7cbd8..74c2e2f404a211865f226774bb73a4f9c70da8a3 100644 (file)
@@ -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