]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.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>
Sun, 24 May 2026 04:06:20 +0000 (12:06 +0800)
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@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/omap_manager/log/log_manager.cc
src/crimson/os/seastore/omap_manager/log/log_manager.h
src/crimson/os/seastore/onode.h
src/crimson/os/seastore/seastore_types.h
src/test/crimson/seastore/test_omap_manager.cc

index 8f75fc6eec2db239546435fe9debe31aa98d0a54..975534bfca68e9b80ae11e018eecff735ab81ed1 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 5e004597111f6b12b41d82ba35623689043619b6..4e623ec48a9c80576682546702b45257c46877aa 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);
@@ -304,7 +309,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 bb2505cc9d17be3d92ce8b7728184371248d71a8..ae04a19f5759cfd85dc72f3e342c8bf1e4c21e34 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 8a725dda1fc70c9700de4a8b71e28becc2bd6933..0f3ae3536d0f835449c6f9b71ca7111f31c855a9 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 f0e9480468f29f879c3478bb232e82d0bf18ca52..21ff6e97e943418c72e3606c086a29e036b19998 100644 (file)
@@ -26,7 +26,10 @@ LogManager::LogManager(
   : tm(tm) {}
 
 LogManager::initialize_omap_ret
-LogManager::initialize_omap(Transaction &t, laddr_t hint, omap_type_t omap_type) 
+LogManager::initialize_omap(
+  Transaction &t,
+  laddr_hint_t hint,
+  omap_type_t omap_type)
 {
   LOG_PREFIX(LogManager::initialize_omap);
   DEBUGT("hint: {}", t, hint);
@@ -834,7 +837,9 @@ LogManager::omap_clear(omap_root_t &root, Transaction &t)
   );
   root.update(
     L_ADDR_NULL,
-    0, L_ADDR_MIN, root.get_type());
+    0,
+    laddr_hint_t::create_as_fixed(L_ADDR_MIN),
+    root.get_type());
   co_return;
 }
 
index 41e14c5b8556fa761cbed30389a889d6bfef32c8..884fd01b7453051d39072f07987ed8d3c6149d2f 100644 (file)
@@ -57,8 +57,10 @@ constexpr uint8_t BATCH_CREATE_SIZE = 50;
 class LogManager : public OMapManager {
 public:
   LogManager(TransactionManager &tm);
-  initialize_omap_ret initialize_omap(Transaction &t,
-    laddr_t hint, omap_type_t type) final;
+  initialize_omap_ret initialize_omap(
+    Transaction &t,
+    laddr_hint_t hint,
+    omap_type_t type) final;
 
   /**
    * omap_set_keys
index e03537e6689012cf36d81af27da0ba6d83b0b1d5..2ee6ca32a71175d0af973439f9564b00d3a9df4c 100644 (file)
@@ -155,12 +155,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 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 0979ec1c1cfb29d8e32530e4b7b97eb571ed1022..6cfd955e612bca9025f629a3400713a933b60dc9 100644 (file)
@@ -2316,15 +2316,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;
@@ -2340,7 +2340,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;
@@ -2356,7 +2356,7 @@ struct omap_root_t {
     return depth;
   }
 
-  laddr_t get_hint() const {
+  laddr_hint_t get_hint() const {
     return hint;
   }
 
@@ -2390,7 +2390,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 65293b5f8afcdac08239e389a06289769d72ec84..2504771d1a65c7e5a5cda916c8fd4b3c923bf2e1 100644 (file)
@@ -382,7 +382,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));