From 7b9662628e3daebcef3990ed5f9c8cf76be8dfd7 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Wed, 11 Dec 2024 12:50:50 +0800 Subject: [PATCH] crimson/os/seastore: cleanups around omap_root_t Signed-off-by: Yingxin Cheng Signed-off-by: Myoungwon Oh --- src/crimson/os/seastore/seastore.cc | 65 ++++++++++++++++------------- src/crimson/os/seastore/seastore.h | 10 ++--- 2 files changed, 41 insertions(+), 34 deletions(-) diff --git a/src/crimson/os/seastore/seastore.cc b/src/crimson/os/seastore/seastore.cc index 2ce07132168..0413b81231e 100644 --- a/src/crimson/os/seastore/seastore.cc +++ b/src/crimson/os/seastore/seastore.cc @@ -1280,8 +1280,10 @@ SeaStore::Shard::_get_attrs( LOG_PREFIX(SeaStoreS::_get_attrs); DEBUGT("...", t); auto& layout = onode.get_layout(); - return do_omap_get_values(t, onode, std::nullopt, - onode.get_layout().xattr_root + auto root = onode.get_layout().xattr_root.get( + onode.get_metadata_hint(device->get_block_size())); + return do_omap_get_values( + t, onode, std::nullopt, std::move(root) ).si_then([&layout, &t, FNAME](auto p) { auto& attrs = std::get<1>(p); DEBUGT("got {} attrs, OI length=0x{:x}, SS length=0x{:x}", @@ -1496,13 +1498,11 @@ SeaStore::Shard::_omap_get_values( SeaStore::Shard::omap_list_ret SeaStore::Shard::omap_list( Onode &onode, - const omap_root_le_t& _root, + omap_root_t&& root, Transaction& t, const std::optional& start, OMapManager::omap_list_config_t config) const { - auto root = _root.get( - onode.get_metadata_hint(device->get_block_size())); if (root.is_null()) { return seastar::make_ready_future( true, omap_values_t{} @@ -1524,7 +1524,7 @@ SeaStore::Shard::do_omap_get_values( Transaction& t, Onode& onode, const std::optional& start, - const omap_root_le_t& root) const + omap_root_t&& root) const { LOG_PREFIX(SeaStoreS::do_omap_get_values); DEBUGT("start={} type={} ...", t, start.has_value() ? *start : "", @@ -1532,7 +1532,7 @@ SeaStore::Shard::do_omap_get_values( auto config = OMapManager::omap_list_config_t() .with_inclusive(false, false) .without_max(); - return omap_list(onode, root, t, start, config + return omap_list(onode, std::move(root), t, start, config ).si_then([FNAME, &t](omap_values_paged_t ret) { DEBUGT("got {} values, complete={}", t, std::get<1>(ret).size(), std::get<0>(ret)); @@ -1557,9 +1557,12 @@ SeaStore::Shard::omap_get_values( "omap_get_values2", op_type_t::OMAP_GET_VALUES2, op_flags, - [this, start](auto &t, auto &onode) { - const auto &root = select_log_omap_root(onode); - return do_omap_get_values(t, onode, start, root); + [this, start](auto &t, auto &onode) + { + auto root = select_log_omap_root(onode).get( + onode.get_metadata_hint(device->get_block_size())); + return do_omap_get_values( + t, onode, start, std::move(root)); }).finally([this] { assert(shard_stats.pending_read_num); --(shard_stats.pending_read_num); @@ -1890,14 +1893,15 @@ SeaStore::Shard::_do_transaction_step( { std::map aset; i.decode_attrset(aset); - const omap_root_le_t &root = select_log_omap_root(*onode); + auto root = select_log_omap_root(*onode).get( + onode->get_metadata_hint(device->get_block_size())); DEBUGT("op OMAP_SETKEYS, oid={}, omap size={}, type={} ...", *ctx.transaction, oid, aset.size(), root.get_type()); return _omap_set_values( ctx, onode, std::move(aset), - root); + std::move(root)); } case Transaction::OP_OMAP_SETHEADER: { @@ -1911,28 +1915,30 @@ SeaStore::Shard::_do_transaction_step( { omap_keys_t keys; i.decode_keyset(keys); - const omap_root_le_t &root = select_log_omap_root(*onode); + auto root = select_log_omap_root(*onode).get( + onode->get_metadata_hint(device->get_block_size())); DEBUGT("op OMAP_RMKEYS, oid={}, omap size={}, type={} ...", *ctx.transaction, oid, keys.size(), root.get_type()); return _omap_rmkeys( ctx, onode, std::move(keys), - root); + std::move(root)); } case Transaction::OP_OMAP_RMKEYRANGE: { std::string first, last; first = i.decode_string(); last = i.decode_string(); - const omap_root_le_t &root = select_log_omap_root(*onode); + auto root = select_log_omap_root(*onode).get( + onode->get_metadata_hint(device->get_block_size())); DEBUGT("op OMAP_RMKEYRANGE, oid={}, first={}, last={}, type={}...", *ctx.transaction, oid, first, last, root.get_type()); return _omap_rmkeyrange( ctx, onode, std::move(first), std::move(last), - root); + std::move(root)); } case Transaction::OP_OMAP_CLEAR: { @@ -2224,9 +2230,11 @@ SeaStore::Shard::_clone_omaps( { auto config = OMapManager::omap_list_config_t() .with_inclusive(false, false); + auto root = onode->get_layout().get_root(type).get( + onode->get_metadata_hint(device->get_block_size())); return omap_list( *onode, - onode->get_layout().get_root(type), + std::move(root), *ctx.transaction, start, config @@ -2240,13 +2248,14 @@ SeaStore::Shard::_clone_omaps( seastar::stop_iteration::yes); } std::string nstart = attrs.rbegin()->first; + auto root = d_onode->get_layout().get_root(type).get( + d_onode->get_metadata_hint(device->get_block_size())); return _omap_set_values( ctx, d_onode, std::map(attrs.begin(), attrs.end()), - d_onode->get_layout().get_root(type) - ).si_then([complete, nstart=std::move(nstart), - &start]() mutable { + std::move(root) + ).si_then([complete, nstart=std::move(nstart), &start]() mutable { if (complete) { return seastar::make_ready_future< seastar::stop_iteration>( @@ -2329,12 +2338,12 @@ SeaStore::Shard::_omap_set_values( internal_context_t &ctx, OnodeRef &onode, std::map &&kvs, - const omap_root_le_t &_root) + omap_root_t&& root) { Transaction& t = *ctx.transaction; return seastar::do_with( BtreeOMapManager(*transaction_manager), - _root.get(onode->get_metadata_hint(device->get_block_size())), + std::move(root), [this, &t, &onode, kvs=std::move(kvs)] (auto &omap_manager, auto &root) mutable { @@ -2397,10 +2406,8 @@ SeaStore::Shard::_omap_rmkeys( internal_context_t &ctx, OnodeRef &onode, omap_keys_t &&keys, - const omap_root_le_t &_root) + omap_root_t&& root) { - auto root = _root.get( - onode->get_metadata_hint(device->get_block_size())); if (root.is_null()) { return seastar::now(); } @@ -2431,15 +2438,13 @@ SeaStore::Shard::_omap_rmkeyrange( OnodeRef &onode, std::string first, std::string last, - const omap_root_le_t &_root) + omap_root_t &&root) { if (first > last) { LOG_PREFIX(SeaStoreS::_omap_rmkeyrange); ERRORT("range error, first:{} > last:{}", *ctx.transaction, first, last); ceph_abort(); } - auto root = _root.get( - onode->get_metadata_hint(device->get_block_size())); if (root.is_null()) { return seastar::now(); } @@ -2539,11 +2544,13 @@ SeaStore::Shard::_setattrs( DEBUGT("set attrs in omap", *ctx.transaction); return std::move(fut ).si_then([this, onode, &ctx, aset=std::move(aset)]() mutable { + auto root = onode->get_layout().xattr_root.get( + onode->get_metadata_hint(device->get_block_size())); return _omap_set_values( ctx, onode, std::move(aset), - onode->get_layout().xattr_root); + std::move(root)); }); } diff --git a/src/crimson/os/seastore/seastore.h b/src/crimson/os/seastore/seastore.h index 2bc4f925e75..ebacef1ff66 100644 --- a/src/crimson/os/seastore/seastore.h +++ b/src/crimson/os/seastore/seastore.h @@ -352,7 +352,7 @@ public: using omap_list_ret = OMapManager::omap_list_ret; omap_list_ret omap_list( Onode& onode, - const omap_root_le_t& omap_root, + omap_root_t&& omap_root, Transaction& t, const std::optional& start, OMapManager::omap_list_config_t config) const; @@ -398,7 +398,7 @@ public: Transaction& t, Onode& onode, const std::optional& start, - const omap_root_le_t& omap_root) const; + omap_root_t&& omap_root) const; base_iertr::future _fiemap( Transaction &t, @@ -447,7 +447,7 @@ public: internal_context_t &ctx, OnodeRef &onode, std::map &&aset, - const omap_root_le_t &omap_root); + omap_root_t&& omap_root); tm_ret _omap_set_header( internal_context_t &ctx, OnodeRef &onode, @@ -459,13 +459,13 @@ public: internal_context_t &ctx, OnodeRef &onode, omap_keys_t &&aset, - const omap_root_le_t &_omap_root); + omap_root_t &&_omap_root); tm_ret _omap_rmkeyrange( internal_context_t &ctx, OnodeRef &onode, std::string first, std::string last, - const omap_root_le_t &_omap_root); + omap_root_t &&_omap_root); tm_ret _truncate( internal_context_t &ctx, OnodeRef &onode, uint64_t size); -- 2.39.5