From: Myoungwon Oh Date: Fri, 29 Nov 2024 07:14:30 +0000 (+0000) Subject: crimson/os/seastore: add omap_type_t to omap_context_t to allocate OMapLeafNode in... X-Git-Tag: v20.0.0~24^2~11 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e0109bb9ac4f4a4b1ce7a9f4d2ea79f30e3bd1cd;p=ceph.git crimson/os/seastore: add omap_type_t to omap_context_t to allocate OMapLeafNode in omap_load_context Signed-off-by: Myoungwon Oh --- 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 6b5a452ab92..ae197097c65 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 @@ -113,10 +113,11 @@ BtreeOMapManager::omap_get_value( LOG_PREFIX(BtreeOMapManager::omap_get_value); DEBUGT("key={}", t, key); return get_omap_root( - get_omap_context(t, omap_root.hint), + get_omap_context(t, omap_root), omap_root ).si_then([this, &t, &key, &omap_root](auto&& extent) { - return extent->get_value(get_omap_context(t, omap_root.hint), key); + return extent->get_value( + get_omap_context(t, omap_root), key); }).si_then([](auto &&e) { return omap_get_value_ret( interruptible::ready_future_marker{}, @@ -150,15 +151,17 @@ BtreeOMapManager::omap_set_key( LOG_PREFIX(BtreeOMapManager::omap_set_key); DEBUGT("{} -> {}", t, key, value); return get_omap_root( - get_omap_context(t, omap_root.hint), + get_omap_context(t, omap_root), omap_root ).si_then([this, &t, &key, &value, &omap_root](auto root) { - return root->insert(get_omap_context(t, omap_root.hint), key, value); + return root->insert(get_omap_context( + t, omap_root), key, value); }).si_then([this, &omap_root, &t](auto mresult) -> omap_set_key_ret { if (mresult.status == mutation_status_t::SUCCESS) return seastar::now(); else if (mresult.status == mutation_status_t::WAS_SPLIT) - return handle_root_split(get_omap_context(t, omap_root.hint), omap_root, mresult); + return handle_root_split( + get_omap_context(t, omap_root), omap_root, mresult); else return seastar::now(); }); @@ -173,19 +176,21 @@ BtreeOMapManager::omap_rm_key( LOG_PREFIX(BtreeOMapManager::omap_rm_key); DEBUGT("{}", t, key); return get_omap_root( - get_omap_context(t, omap_root.hint), + get_omap_context(t, omap_root), omap_root ).si_then([this, &t, &key, &omap_root](auto root) { - return root->rm_key(get_omap_context(t, omap_root.hint), key); + return root->rm_key(get_omap_context(t, omap_root), key); }).si_then([this, &omap_root, &t](auto mresult) -> omap_rm_key_ret { if (mresult.status == mutation_status_t::SUCCESS) { return seastar::now(); } else if (mresult.status == mutation_status_t::WAS_SPLIT) { - return handle_root_split(get_omap_context(t, omap_root.hint), omap_root, mresult); + return handle_root_split( + get_omap_context(t, omap_root), omap_root, mresult); } else if (mresult.status == mutation_status_t::NEED_MERGE) { auto root = *(mresult.need_merge); if (root->get_node_size() == 1 && omap_root.depth != 1) { - return handle_root_merge(get_omap_context(t, omap_root.hint), omap_root, mresult); + return handle_root_merge( + get_omap_context(t, omap_root), omap_root, mresult); } else { return seastar::now(); } @@ -259,11 +264,11 @@ BtreeOMapManager::omap_list( } return get_omap_root( - get_omap_context(t, omap_root.hint), + get_omap_context(t, omap_root), omap_root ).si_then([this, config, &t, &first, &last, &omap_root](auto extent) { return extent->list( - get_omap_context(t, omap_root.hint), + get_omap_context(t, omap_root), first, last, config); @@ -278,10 +283,10 @@ BtreeOMapManager::omap_clear( LOG_PREFIX(BtreeOMapManager::omap_clear); DEBUGT("{}", t, omap_root); return get_omap_root( - get_omap_context(t, omap_root.hint), + get_omap_context(t, omap_root), omap_root ).si_then([this, &t, &omap_root](auto extent) { - return extent->clear(get_omap_context(t, omap_root.hint)); + return extent->clear(get_omap_context(t, omap_root)); }).si_then([this, &omap_root, &t] { return tm.remove( t, omap_root.get_location() 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 5f70d565c1e..03bd9a79914 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 @@ -26,8 +26,9 @@ class BtreeOMapManager : public OMapManager { TransactionManager &tm; omap_context_t get_omap_context( - Transaction &t, laddr_t addr_min) { - return omap_context_t{tm, t, addr_min}; + Transaction &t, const omap_root_t &omap_root) { + ceph_assert(omap_root.type < omap_type_t::NUM_TYPES); + return omap_context_t{tm, t, omap_root.hint, omap_root.type}; } /* get_omap_root 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 7c2392731c0..d9fa981c4da 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 @@ -19,6 +19,7 @@ struct omap_context_t { TransactionManager &tm; Transaction &t; laddr_t hint; + omap_type_t type; }; enum class mutation_status_t : uint8_t { diff --git a/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc b/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc index 5ba964ee99a..6fd9daff128 100644 --- a/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc +++ b/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc @@ -9,6 +9,7 @@ #include "crimson/os/seastore/omap_manager/btree/omap_btree_node.h" #include "crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.h" #include "seastar/core/thread.hh" +#include "crimson/os/seastore/omap_manager/btree/btree_omap_manager.h" SET_SUBSYS(seastore_omap); @@ -747,7 +748,8 @@ omap_load_extent(omap_context_t oc, laddr_t laddr, depth_t depth) }); } else { return oc.tm.read_extent( - oc.t, laddr, OMAP_LEAF_BLOCK_SIZE + oc.t, laddr, + BtreeOMapManager::get_leaf_size(oc.type) ).handle_error_interruptible( omap_load_extent_iertr::pass_further{}, crimson::ct_error::assert_all{ "Invalid error in omap_load_extent" }