From: Radoslaw Zarzynski Date: Wed, 18 Mar 2026 19:34:50 +0000 (+0000) Subject: crimson/osd: fixes after crimson::os::with_store<>() X-Git-Tag: v21.0.0~3^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c182e7a1909ab1d6c27706ca158adb90495810ee;p=ceph.git crimson/osd: fixes after crimson::os::with_store<>() Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/ec_backend.cc b/src/crimson/osd/ec_backend.cc index 6543aa8ae9cb..0eba70998447 100644 --- a/src/crimson/osd/ec_backend.cc +++ b/src/crimson/osd/ec_backend.cc @@ -392,7 +392,8 @@ ECBackend::handle_sub_write( pg.op_applied(op.at_version); } logger().debug("{}:{}", __func__, __LINE__); - return store->do_transaction(coll, std::move(txn)).then([FNAME] { + return crimson::os::with_store_do_transaction( + store, coll, std::move(txn)).then([FNAME] { DEBUG("transaction commited!"); return write_iertr::now(); }); @@ -494,7 +495,8 @@ ECBackend::maybe_chunked_read( DEBUG("obj {} off {} size {} flags {}", obj, off, size, flags); DEBUG("oid is: {}", ghobject_t{obj, ghobject_t::NO_GEN, get_shard()}); if (is_single_chunk(obj, op)) { - return store->read( + return crimson::os::with_store<&crimson::os::FuturizedStore::Shard::read>( + store, coll, ghobject_t{obj, ghobject_t::NO_GEN, get_shard()}, off, size, flags); } else { return seastar::do_with(ceph::bufferlist{}, [=, this] (auto&& result_bl) { @@ -510,7 +512,8 @@ ECBackend::maybe_chunked_read( std::end(sub_spec), [&obj, off, flags, subchunk_size, m, &result_bl, this] (const auto& subchunk) { const auto [sub_off_count, sub_size_count] = subchunk; - return store->read( + return crimson::os::with_store<&crimson::os::FuturizedStore::Shard::read>( + store, coll, ghobject_t{obj, ghobject_t::NO_GEN, get_shard()}, off + m*sinfo.get_chunk_size() + sub_off_count*subchunk_size, @@ -598,8 +601,8 @@ ECBackend::handle_rep_read_op(ECSubRead& op) if (reply.errors.count(obj_attr)) { return read_ertr::now(); } - return store->get_attrs( - coll, ghobject_t{obj_attr, ghobject_t::NO_GEN, get_shard()} + return crimson::os::with_store<&crimson::os::FuturizedStore::Shard::get_attrs>( + store, coll, ghobject_t{obj_attr, ghobject_t::NO_GEN, get_shard()}, 0 ).safe_then([&reply, obj_attr] (auto&& attrs) { reply.attrs_read[obj_attr] = std::move(attrs); return read_ertr::now(); diff --git a/src/crimson/osd/ec_recovery_backend.cc b/src/crimson/osd/ec_recovery_backend.cc index 0aab51a970ae..7b317f03f14d 100644 --- a/src/crimson/osd/ec_recovery_backend.cc +++ b/src/crimson/osd/ec_recovery_backend.cc @@ -28,7 +28,7 @@ ECRecoveryBackend::ECRecoveryBackend( crimson::osd::ShardServices& shard_services, crimson::os::CollectionRef coll, ECBackend* backend) -: ::crimson::osd::RecoveryBackend(pg, shard_services, coll, backend), +: ::crimson::osd::RecoveryBackend(pg, shard_services, coll, pg.get_store_index(), backend), ::ECCommon::RecoveryBackend( shard_services.get_cct(), coll->get_cid(), @@ -74,8 +74,10 @@ void ECRecoveryBackend::commit_txn_send_replies( ceph::os::Transaction&& txn, std::map replies) { - std::ignore = shard_services.get_store().do_transaction( - crimson::osd::RecoveryBackend::coll, std::move(txn) + std::ignore = crimson::os::with_store_do_transaction( + shard_services.get_store(pg.get_store_index()), + crimson::osd::RecoveryBackend::coll, + std::move(txn) ).then([replies=std::move(replies), this]() mutable { if (auto msgit = replies.find(get_parent()->whoami_shard().osd); msgit != std::end(replies)) { diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index 8047b17c15c0..fe7b9fdc2d1c 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -87,9 +87,8 @@ PGBackend::PGBackend(pg_shard_t whoami, coll{coll}, shard_services{shard_services}, dpp{dpp}, - store{&shard_services.get_store(store_index)} + store{shard_services.get_store(store_index)} { - logger().info("initialized PGBackend::store with {}", (void*)this->store); } tl::expected @@ -1120,7 +1119,7 @@ PGBackend::setxattr_ierrorator::future<> PGBackend::setxattr( } return crimson::os::with_store< &crimson::os::FuturizedStore::Shard::get_max_attr_name_length - >(store).then([this, &os, &osd_op, &txn, &delta_stats](unsigned store_max_name_len) { + >(store).then([this, &os, &osd_op, &txn, &delta_stats, &attr_cache](unsigned store_max_name_len) { const auto max_name_len = std::min( store_max_name_len, local_conf()->osd_max_attr_name_len); if (osd_op.op.xattr.name_len > max_name_len) { @@ -1190,7 +1189,8 @@ PGBackend::get_attr_ierrorator::future<> PGBackend::get_xattrs( [&] () { if (!is_erasure()) { logger().debug("getxattrx on obj={} goes into objstore", os.oi.soid); - return store->get_attrs(coll, ghobject_t{os.oi.soid}); + return crimson::os::with_store<&crimson::os::FuturizedStore::Shard::get_attrs>( + store, coll, ghobject_t{os.oi.soid}, 0); } return crimson::os::FuturizedStore::Shard::get_attrs_ertr::make_ready_future< crimson::os::FuturizedStore::Shard::attrs_t>(attr_cache); diff --git a/src/crimson/osd/replicated_backend.cc b/src/crimson/osd/replicated_backend.cc index a3dbfd52b522..89feb1e9136c 100644 --- a/src/crimson/osd/replicated_backend.cc +++ b/src/crimson/osd/replicated_backend.cc @@ -370,7 +370,8 @@ ReplicatedBackend::getxattr( std::string&& key) const { return seastar::do_with(key, [this, &soid](auto &key) { - return store->get_attr(coll, ghobject_t{soid}, key); + return crimson::os::with_store<&crimson::os::FuturizedStore::Shard::get_attr>( + store, coll, ghobject_t{soid}, key, 0); }); } diff --git a/src/crimson/osd/replicated_recovery_backend.cc b/src/crimson/osd/replicated_recovery_backend.cc index e11f73af257d..0711ec430ed9 100644 --- a/src/crimson/osd/replicated_recovery_backend.cc +++ b/src/crimson/osd/replicated_recovery_backend.cc @@ -21,6 +21,14 @@ using std::string; namespace crimson::osd { +ReplicatedRecoveryBackend::ReplicatedRecoveryBackend( + crimson::osd::PG& pg, + crimson::osd::ShardServices& shard_services, + crimson::os::CollectionRef coll, + PGBackend* backend) + : RecoveryBackend(pg, shard_services, coll, pg.get_store_index(), backend) +{} + RecoveryBackend::interruptible_future<> ReplicatedRecoveryBackend::recover_object( const hobject_t& soid, diff --git a/src/crimson/osd/replicated_recovery_backend.h b/src/crimson/osd/replicated_recovery_backend.h index 15ce671629f4..2b144a08b1ba 100644 --- a/src/crimson/osd/replicated_recovery_backend.h +++ b/src/crimson/osd/replicated_recovery_backend.h @@ -22,9 +22,7 @@ public: ReplicatedRecoveryBackend(crimson::osd::PG& pg, crimson::osd::ShardServices& shard_services, crimson::os::CollectionRef coll, - PGBackend* backend) - : RecoveryBackend(pg, shard_services, coll, pg.get_store_index(), backend) - {} + PGBackend* backend); interruptible_future<> handle_recovery_op( Ref m, crimson::net::ConnectionXcoreRef conn) final;