From: Yingxin Cheng Date: Wed, 11 Dec 2024 07:00:35 +0000 (+0800) Subject: crimson/os/seastore: introduce get_omap_root() X-Git-Tag: v20.3.0~347^2~10 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=8a7bad00428c007d0202672c5c422b194716a82c;p=ceph.git crimson/os/seastore: introduce get_omap_root() Signed-off-by: Yingxin Cheng Signed-off-by: Myoungwon Oh --- diff --git a/src/crimson/os/seastore/onode.h b/src/crimson/os/seastore/onode.h index 548239c671897..6acae93264275 100644 --- a/src/crimson/os/seastore/onode.h +++ b/src/crimson/os/seastore/onode.h @@ -49,7 +49,7 @@ struct onode_layout_t { } else if (type == omap_type_t::OMAP) { return omap_root; } else { - ceph_assert(type == omap_type_t::LOG); + assert(type == omap_type_t::LOG); return log_root; } } @@ -105,6 +105,10 @@ public: laddr_t get_data_hint() const { return get_hint(); } + omap_root_t get_root(omap_type_t type, extent_len_t block_size) const { + return get_layout().get_root(type).get( + get_metadata_hint(block_size)); + } friend std::ostream& operator<<(std::ostream &out, const Onode &rhs); }; diff --git a/src/crimson/os/seastore/seastore.cc b/src/crimson/os/seastore/seastore.cc index 0413b81231e08..7be7cbe45f0ae 100644 --- a/src/crimson/os/seastore/seastore.cc +++ b/src/crimson/os/seastore/seastore.cc @@ -1236,11 +1236,7 @@ SeaStore::Shard::_get_attr( return seastar::make_ready_future(std::move(bl)); } DEBUGT("name={} ...", t, name); - return _omap_get_value( - t, - layout.xattr_root.get( - onode.get_metadata_hint(device->get_block_size())), - name); + return _omap_get_value(t, get_omap_root(omap_type_t::XATTR, onode), name); } SeaStore::Shard::get_attr_errorator::future @@ -1280,10 +1276,8 @@ SeaStore::Shard::_get_attrs( LOG_PREFIX(SeaStoreS::_get_attrs); DEBUGT("...", t); auto& layout = onode.get_layout(); - 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) + t, onode, std::nullopt, get_omap_root(omap_type_t::XATTR, onode) ).si_then([&layout, &t, FNAME](auto p) { auto& attrs = std::get<1>(p); DEBUGT("got {} attrs, OI length=0x{:x}, SS length=0x{:x}", @@ -2034,12 +2028,9 @@ SeaStore::Shard::_rename( { auto olayout = onode->get_layout(); uint32_t size = olayout.size; - auto omap_root = olayout.omap_root.get( - d_onode->get_metadata_hint(device->get_block_size())); - auto xattr_root = olayout.xattr_root.get( - d_onode->get_metadata_hint(device->get_block_size())); - auto log_root = olayout.log_root.get( - d_onode->get_metadata_hint(device->get_block_size())); + auto omap_root = get_omap_root(omap_type_t::OMAP, *onode); + auto xattr_root = get_omap_root(omap_type_t::XATTR, *onode); + auto log_root = get_omap_root(omap_type_t::LOG, *onode); auto object_data = olayout.object_data.get(); auto oi_bl = ceph::bufferlist::static_from_mem( &olayout.oi[0], @@ -2145,18 +2136,15 @@ SeaStore::Shard::_remove( { return omaptree_clear_no_onode( *ctx.transaction, - onode->get_layout().omap_root.get( - onode->get_metadata_hint(device->get_block_size())) + get_omap_root(omap_type_t::OMAP, *onode) ).si_then([this, &ctx, &onode] { return omaptree_clear_no_onode( *ctx.transaction, - onode->get_layout().xattr_root.get( - onode->get_metadata_hint(device->get_block_size()))); + get_omap_root(omap_type_t::XATTR, *onode)); }).si_then([this, &ctx, &onode] { return omaptree_clear_no_onode( *ctx.transaction, - onode->get_layout().log_root.get( - onode->get_metadata_hint(device->get_block_size()))); + get_omap_root(omap_type_t::LOG, *onode)); }).si_then([this, &ctx, &onode] { return seastar::do_with( ObjectDataHandler(max_object_size), @@ -2230,14 +2218,7 @@ 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, - std::move(root), - *ctx.transaction, - start, - config + return omap_list(*onode, get_omap_root(type, *onode), *ctx.transaction, start, config ).si_then([&ctx, &onode, &d_onode, this, type, &start](auto p) { auto complete = std::get<0>(p); auto &attrs = std::get<1>(p); @@ -2248,13 +2229,11 @@ 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()), - std::move(root) + get_omap_root(type, *d_onode) ).si_then([complete, nstart=std::move(nstart), &start]() mutable { if (complete) { return seastar::make_ready_future< @@ -2389,14 +2368,13 @@ SeaStore::Shard::_omap_clear( { return _xattr_rmattr( ctx, + get_omap_root(omap_type_t::XATTR, *onode), onode, std::string(OMAP_HEADER_XATTR_KEY) ).si_then([this, &ctx, &onode] { - auto root = onode->get_layout().omap_root.get( - onode->get_metadata_hint(device->get_block_size())); return omaptree_clear( *ctx.transaction, - std::move(root), + get_omap_root(omap_type_t::OMAP, *onode), *onode); }); } @@ -2507,6 +2485,7 @@ SeaStore::Shard::_setattrs( // need to remove it first fut = _xattr_rmattr( ctx, + get_omap_root(omap_type_t::XATTR, *onode), onode, OI_ATTR); } @@ -2525,6 +2504,7 @@ SeaStore::Shard::_setattrs( if (!layout.ss_size) { fut = _xattr_rmattr( ctx, + get_omap_root(omap_type_t::XATTR, *onode), onode, SS_ATTR); } @@ -2544,13 +2524,11 @@ 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), - std::move(root)); + get_omap_root(omap_type_t::XATTR, *onode)); }); } @@ -2570,6 +2548,7 @@ SeaStore::Shard::_rmattr( } else { return _xattr_rmattr( ctx, + get_omap_root(omap_type_t::XATTR, *onode), onode, std::move(name)); } @@ -2578,13 +2557,12 @@ SeaStore::Shard::_rmattr( SeaStore::Shard::tm_ret SeaStore::Shard::_xattr_rmattr( internal_context_t &ctx, + omap_root_t&& root, OnodeRef &onode, std::string &&name) { LOG_PREFIX(SeaStoreS::_xattr_rmattr); DEBUGT("onode={}", *ctx.transaction, *onode); - auto root = onode->get_layout().xattr_root.get( - onode->get_metadata_hint(device->get_block_size())); if (root.is_null()) { return base_iertr::now(); } @@ -2610,11 +2588,9 @@ SeaStore::Shard::_rmattrs( { onode->clear_object_info(*ctx.transaction); onode->clear_snapset(*ctx.transaction); - auto root = onode->get_layout().xattr_root.get( - onode->get_metadata_hint(device->get_block_size())); return omaptree_clear( *ctx.transaction, - std::move(root), + get_omap_root(omap_type_t::XATTR, *onode), *onode); } diff --git a/src/crimson/os/seastore/seastore.h b/src/crimson/os/seastore/seastore.h index ebacef1ff6605..2feb4f556c50c 100644 --- a/src/crimson/os/seastore/seastore.h +++ b/src/crimson/os/seastore/seastore.h @@ -482,6 +482,7 @@ public: OnodeRef &onode); tm_ret _xattr_rmattr( internal_context_t &ctx, + omap_root_t&& root, OnodeRef &onode, std::string &&name); tm_ret _create_collection( @@ -516,6 +517,10 @@ public: * omaptree interfaces */ + omap_root_t get_omap_root(omap_type_t type, Onode& onode) const { + return onode.get_root(type, device->get_block_size()); + } + base_iertr::future omaptree_do_clear( Transaction& t, omap_root_t&& root);