From: Radoslaw Zarzynski Date: Tue, 26 Mar 2024 11:47:38 +0000 (+0000) Subject: crimson/osd: ECReplicatedBackend embraces ECCommon::RecoveryBackend X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=eb237a8dee830cc8f57a01a572613c26ec6c4070;p=ceph-ci.git crimson/osd: ECReplicatedBackend embraces ECCommon::RecoveryBackend The idea is to compose the latter into the former (thus the private inheritance) to easily build a class that fulfills the crimon iface called `crimson::ReplicatedBackend`. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/ec_backend.h b/src/crimson/osd/ec_backend.h index 25abe0a451d..c228e01456d 100644 --- a/src/crimson/osd/ec_backend.h +++ b/src/crimson/osd/ec_backend.h @@ -48,7 +48,10 @@ public: write_iertr::future<> handle_rep_write_reply(ECSubWriteReply&& op); ll_read_ierrorator::future<> handle_rep_read_op(Ref); ll_read_ierrorator::future<> handle_rep_read_reply(Ref); + private: + friend class ECRecoveryBackend; + ll_read_ierrorator::future _read(const hobject_t& hoid, uint64_t off, uint64_t len, uint32_t flags) override; rep_op_fut_t diff --git a/src/crimson/osd/ec_recovery_backend.cc b/src/crimson/osd/ec_recovery_backend.cc index dd1d98c650a..766b27288a5 100644 --- a/src/crimson/osd/ec_recovery_backend.cc +++ b/src/crimson/osd/ec_recovery_backend.cc @@ -6,6 +6,7 @@ #include #include +#include "crimson/osd/ec_backend.h" #include "crimson/osd/ec_recovery_backend.h" #include "crimson/osd/pg.h" #include "crimson/osd/pg_backend.h" @@ -20,6 +21,21 @@ namespace { } } +ECRecoveryBackend::ECRecoveryBackend( + crimson::osd::PG& pg, + crimson::osd::ShardServices& shard_services, + crimson::os::CollectionRef coll, + ECBackend* backend) +: ::RecoveryBackend(pg, shard_services, coll, backend), + ::ECCommon::RecoveryBackend( + shard_services.get_cct(), + coll->get_cid(), + backend->ec_impl, + backend->sinfo, + backend->read_pipeline, + &pg) +{} + RecoveryBackend::interruptible_future<> ECRecoveryBackend::recover_object( const hobject_t& soid, @@ -29,6 +45,12 @@ ECRecoveryBackend::recover_object( return seastar::now(); } +void ECRecoveryBackend::commit_txn_send_replies( + ceph::os::Transaction&& txn, + std::map replies) +{ +} + RecoveryBackend::interruptible_future<> ECRecoveryBackend::handle_push( Ref m) @@ -55,9 +77,9 @@ ECRecoveryBackend::handle_recovery_op( return handle_push(boost::static_pointer_cast(m)); case MSG_OSD_PG_PUSH_REPLY: return handle_push_reply( - boost::static_pointer_cast(m)); + boost::static_pointer_cast(m)); default: // delegate to parent class for handling backend-agnostic recovery ops. - return RecoveryBackend::handle_recovery_op(std::move(m), conn); + return ::RecoveryBackend::handle_recovery_op(std::move(m), conn); } } diff --git a/src/crimson/osd/ec_recovery_backend.h b/src/crimson/osd/ec_recovery_backend.h index bb86c2eb80a..6f881852cdf 100644 --- a/src/crimson/osd/ec_recovery_backend.h +++ b/src/crimson/osd/ec_recovery_backend.h @@ -19,6 +19,7 @@ #include "messages/MOSDPGPush.h" #include "messages/MOSDPGPushReply.h" #include "messages/MOSDPGScan.h" +#include "osd/ECCommon.h" #include "osd/recovery_types.h" #include "osd/osd_types.h" @@ -28,14 +29,13 @@ namespace crimson::osd{ class PGBackend; -class ECRecoveryBackend : public RecoveryBackend { +class ECRecoveryBackend : public RecoveryBackend, + private ECCommon::RecoveryBackend { public: ECRecoveryBackend(crimson::osd::PG& pg, crimson::osd::ShardServices& shard_services, crimson::os::CollectionRef coll, - PGBackend* backend) - : RecoveryBackend(pg, shard_services, coll, backend) - {} + ECBackend* backend); interruptible_future<> handle_recovery_op( Ref m, @@ -50,6 +50,10 @@ public: } private: + void commit_txn_send_replies( + ceph::os::Transaction&& txn, + std::map replies) override; + interruptible_future<> handle_push( Ref m); interruptible_future<> handle_push_reply( diff --git a/src/crimson/osd/recovery_backend.cc b/src/crimson/osd/recovery_backend.cc index 57db81a10b8..91085966b5f 100644 --- a/src/crimson/osd/recovery_backend.cc +++ b/src/crimson/osd/recovery_backend.cc @@ -6,6 +6,7 @@ #include "crimson/common/coroutine.h" #include "crimson/common/exception.h" #include "crimson/common/log.h" +#include "crimson/osd/ec_backend.h" #include "crimson/osd/ec_recovery_backend.h" #include "crimson/osd/recovery_backend.h" #include "crimson/osd/replicated_recovery_backend.h" @@ -483,7 +484,7 @@ std::unique_ptr RecoveryBackend::create( pg, shard_services, coll, backend); case pg_pool_t::TYPE_ERASURE: return std::make_unique( - pg, shard_services, coll, backend); + pg, shard_services, coll, static_cast(backend)); default: ceph_abort_msg(seastar::format( "unsupported pool type '{}'", pool.type));