]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/OMapManager: adapt laddr_hint_t approach
authorZhang Song <zhangsong02@qianxin.com>
Mon, 26 May 2025 07:23:25 +0000 (15:23 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Mon, 2 Feb 2026 11:37:02 +0000 (19:37 +0800)
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
src/crimson/os/seastore/omap_manager.h
src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.cc
src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.h
src/crimson/os/seastore/omap_manager/btree/omap_btree_node.h
src/crimson/os/seastore/onode.h
src/crimson/os/seastore/seastore_types.h
src/test/crimson/seastore/test_omap_manager.cc

index 33174b22e4c379c26376fd8ffa309c609e0f0f85..a11ad944072099e0b7e713080a32952a6be2c36b 100644 (file)
@@ -58,7 +58,9 @@ public:
    */
   using initialize_omap_iertr = base_iertr;
   using initialize_omap_ret = initialize_omap_iertr::future<omap_root_t>;
-  virtual initialize_omap_ret initialize_omap(Transaction &t, laddr_t hint,
+  virtual initialize_omap_ret initialize_omap(
+    Transaction &t,
+    laddr_hint_t hint,
     omap_type_t type) = 0;
 
   /**
index 7495839ec2f6e88991e9ea1035d047b4601e0ded..66fd01d6ce0a596e5f34fff20b68bd702b5885bc 100644 (file)
@@ -18,7 +18,9 @@ BtreeOMapManager::BtreeOMapManager(
   : tm(tm) {}
 
 BtreeOMapManager::initialize_omap_ret
-BtreeOMapManager::initialize_omap(Transaction &t, laddr_t hint,
+BtreeOMapManager::initialize_omap(
+  Transaction &t,
+  laddr_hint_t hint,
   omap_type_t type)
 {
   LOG_PREFIX(BtreeOMapManager::initialize_omap);
@@ -30,7 +32,10 @@ BtreeOMapManager::initialize_omap(Transaction &t, laddr_t hint,
       omap_node_meta_t meta{1};
       root_extent->set_meta(meta);
       omap_root_t omap_root;
-      omap_root.update(root_extent->get_laddr(), 1, hint, type);
+      laddr_t root_laddr = root_extent->get_laddr();
+      auto new_hint = laddr_hint_t::create_object_md_hint(
+       root_laddr.get_clone_prefix(), hint.block_size);
+      omap_root.update(root_laddr, 1, new_hint, type);
       t.get_omap_tree_stats().depth = 1u;
       t.get_omap_tree_stats().extents_num_delta++;
       return initialize_omap_iertr::make_ready_future<omap_root_t>(omap_root);
@@ -338,7 +343,7 @@ BtreeOMapManager::omap_clear(
     ).si_then([&omap_root] (auto ret) {
       omap_root.update(
        L_ADDR_NULL,
-       0, L_ADDR_MIN, omap_root.get_type());
+       0, LADDR_HINT_NULL, omap_root.get_type());
       return omap_clear_iertr::now();
     });
   }).handle_error_interruptible(
index 804df917c1cc987eedc40eaa134abbb610d70b0d..194d141129207b5f1ef64839142468773c080695 100644 (file)
@@ -66,7 +66,9 @@ class BtreeOMapManager : public OMapManager {
 public:
   explicit BtreeOMapManager(TransactionManager &tm);
 
-  initialize_omap_ret initialize_omap(Transaction &t, laddr_t hint,
+  initialize_omap_ret initialize_omap(
+    Transaction &t,
+    laddr_hint_t hint,
     omap_type_t type) final;
 
   omap_get_value_ret omap_get_value(
index b9f49104190a50a46fdd0c25e2511036551eee53..f866e9b43c56150ebbdfd117783c2c9a5c960558 100644 (file)
@@ -22,7 +22,7 @@ const std::string END_KEY(64, (char)(-1));
 struct omap_context_t {
   TransactionManager &tm;
   Transaction &t;
-  laddr_t hint;
+  laddr_hint_t hint;
   omap_type_t type;
 };
 
index e83c8cdddbc223c54565cfd03f17f815580e1e5b..6cf47a37510f5b5a49c76a66e5590a8694af2b19 100644 (file)
@@ -159,12 +159,12 @@ public:
     std::optional<laddr_t> prefix = std::nullopt;
 
     const auto &layout = get_layout();
-    auto omap_root = layout.omap_root.get(L_ADDR_NULL);
+    auto omap_root = layout.omap_root.get(LADDR_HINT_NULL);
     if (!omap_root.is_null()) {
       prefix.emplace(omap_root.addr.get_clone_prefix());
     }
 
-    auto log_root = layout.log_root.get(L_ADDR_NULL);
+    auto log_root = layout.log_root.get(LADDR_HINT_NULL);
     if (!log_root.is_null()) {
       auto laddr = log_root.addr.get_clone_prefix();
       if (prefix) {
@@ -174,7 +174,7 @@ public:
       }
     }
 
-    auto xattr_root = layout.xattr_root.get(L_ADDR_NULL);
+    auto xattr_root = layout.xattr_root.get(LADDR_HINT_NULL);
     if (!xattr_root.is_null()) {
       auto laddr = xattr_root.addr.get_clone_prefix();
       if (prefix) {
index 6bc31172d9032f773dd819f74ea5fc12dafdceef..2628c92c4ee02e447d5d40c097ea9ae47aace9f7 100644 (file)
@@ -2306,15 +2306,15 @@ std::ostream &operator<<(std::ostream &out, const omap_type_t &type);
 struct omap_root_t {
   laddr_t addr = L_ADDR_NULL;
   depth_t depth = 0;
-  laddr_t hint = L_ADDR_MIN;
+  laddr_hint_t hint = LADDR_HINT_NULL;
   bool mutated = false;
   omap_type_t type = omap_type_t::NONE;
 
   omap_root_t() = default;
-  omap_root_t(laddr_t addr, depth_t depth, laddr_t addr_min, omap_type_t type)
+  omap_root_t(laddr_t addr, depth_t depth, laddr_hint_t hint, omap_type_t type)
     : addr(addr),
       depth(depth),
-      hint(addr_min),
+      hint(hint),
       type(type) {}
 
   omap_root_t(const omap_root_t &o) = default;
@@ -2330,7 +2330,7 @@ struct omap_root_t {
     return mutated;
   }
   
-  void update(laddr_t _addr, depth_t _depth, laddr_t _hint, omap_type_t _type) {
+  void update(laddr_t _addr, depth_t _depth, laddr_hint_t _hint, omap_type_t _type) {
     mutated = true;
     addr = _addr;
     depth = _depth;
@@ -2346,7 +2346,7 @@ struct omap_root_t {
     return depth;
   }
 
-  laddr_t get_hint() const {
+  laddr_hint_t get_hint() const {
     return hint;
   }
 
@@ -2380,7 +2380,7 @@ public:
     type = nroot.get_type();
   }
   
-  omap_root_t get(laddr_t hint) const {
+  omap_root_t get(laddr_hint_t hint) const {
     return omap_root_t(addr, depth, hint, type);
   }
   
index 1df414135530eb32652e8bf0148c5a7141bb0974..033da5a5a048c87d4a5683fb63174370eec92679 100644 (file)
@@ -387,7 +387,8 @@ struct omap_manager_test_t :
     omap_root_t omap_root = with_trans_intr(
       *t,
       [this](auto &t) {
-       return omap_manager->initialize_omap(t, L_ADDR_MIN,
+       auto hint = laddr_hint_t::create_global_md_hint();
+       return omap_manager->initialize_omap(t, hint,
          omap_type_t::OMAP);
       }).unsafe_get();
     submit_transaction(std::move(t));