From: Zhang Song Date: Mon, 26 May 2025 07:23:25 +0000 (+0800) Subject: crimson/os/seastore/OMapManager: adapt laddr_hint_t approach X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5d615a34c9dbec7cc2927cfeef8d6bafae9a4146;p=ceph-ci.git crimson/os/seastore/OMapManager: adapt laddr_hint_t approach Signed-off-by: Zhang Song Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/os/seastore/omap_manager.h b/src/crimson/os/seastore/omap_manager.h index 8f75fc6eec2..975534bfca6 100644 --- a/src/crimson/os/seastore/omap_manager.h +++ b/src/crimson/os/seastore/omap_manager.h @@ -58,7 +58,9 @@ public: */ using initialize_omap_iertr = base_iertr; using initialize_omap_ret = initialize_omap_iertr::future; - 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; /** diff --git a/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.cc b/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.cc index 5e004597111..4e623ec48a9 100644 --- a/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.cc +++ b/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.cc @@ -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); @@ -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( diff --git a/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.h b/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.h index bb2505cc9d1..ae04a19f575 100644 --- a/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.h +++ b/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.h @@ -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( diff --git a/src/crimson/os/seastore/omap_manager/btree/omap_btree_node.h b/src/crimson/os/seastore/omap_manager/btree/omap_btree_node.h index 8a725dda1fc..0f3ae3536d0 100644 --- a/src/crimson/os/seastore/omap_manager/btree/omap_btree_node.h +++ b/src/crimson/os/seastore/omap_manager/btree/omap_btree_node.h @@ -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; }; diff --git a/src/crimson/os/seastore/omap_manager/log/log_manager.cc b/src/crimson/os/seastore/omap_manager/log/log_manager.cc index f0e9480468f..21ff6e97e94 100644 --- a/src/crimson/os/seastore/omap_manager/log/log_manager.cc +++ b/src/crimson/os/seastore/omap_manager/log/log_manager.cc @@ -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; } diff --git a/src/crimson/os/seastore/omap_manager/log/log_manager.h b/src/crimson/os/seastore/omap_manager/log/log_manager.h index 41e14c5b855..884fd01b745 100644 --- a/src/crimson/os/seastore/omap_manager/log/log_manager.h +++ b/src/crimson/os/seastore/omap_manager/log/log_manager.h @@ -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 diff --git a/src/crimson/os/seastore/onode.h b/src/crimson/os/seastore/onode.h index e03537e6689..2ee6ca32a71 100644 --- a/src/crimson/os/seastore/onode.h +++ b/src/crimson/os/seastore/onode.h @@ -155,12 +155,12 @@ public: std::optional 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) { diff --git a/src/crimson/os/seastore/seastore_types.h b/src/crimson/os/seastore/seastore_types.h index 0979ec1c1cf..6cfd955e612 100644 --- a/src/crimson/os/seastore/seastore_types.h +++ b/src/crimson/os/seastore/seastore_types.h @@ -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); } diff --git a/src/test/crimson/seastore/test_omap_manager.cc b/src/test/crimson/seastore/test_omap_manager.cc index 65293b5f8af..2504771d1a6 100644 --- a/src/test/crimson/seastore/test_omap_manager.cc +++ b/src/test/crimson/seastore/test_omap_manager.cc @@ -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));