From: Radoslaw Zarzynski Date: Tue, 19 Mar 2024 17:18:41 +0000 (+0000) Subject: crimson/osd: bring factory to RecoveryBackend X-Git-Tag: v21.0.0~3^2~64 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=21c3eaf6934b792810daa8c733f480259fcdb492;p=ceph.git crimson/osd: bring factory to RecoveryBackend Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index 9a0779d8ed37..504ce217d751 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -38,6 +38,7 @@ #include "crimson/os/cyanstore/cyan_store.h" #include "crimson/os/futurized_collection.h" #include "crimson/osd/ec_backend.h" +#include "crimson/osd/ec_recovery_backend.h" #include "crimson/osd/exceptions.h" #include "crimson/osd/pg_meta.h" #include "crimson/osd/pg_backend.h" @@ -122,8 +123,12 @@ PG::PG( *this, *this)), recovery_backend( - std::make_unique( - *this, shard_services, coll_ref, backend.get())), + RecoveryBackend::create( + pool, + *this, + shard_services, + coll_ref, + backend.get())), recovery_handler( std::make_unique(this)), peering_state( diff --git a/src/crimson/osd/recovery_backend.cc b/src/crimson/osd/recovery_backend.cc index eeb94e0a34f1..a47e98f8069d 100644 --- a/src/crimson/osd/recovery_backend.cc +++ b/src/crimson/osd/recovery_backend.cc @@ -6,7 +6,9 @@ #include "crimson/common/coroutine.h" #include "crimson/common/exception.h" #include "crimson/common/log.h" +#include "crimson/osd/ec_recovery_backend.h" #include "crimson/osd/recovery_backend.h" +#include "crimson/osd/replicated_recovery_backend.h" #include "crimson/osd/pg.h" #include "crimson/osd/pg_backend.h" #include "crimson/osd/osd_operations/background_recovery.h" @@ -468,4 +470,24 @@ RecoveryBackend::handle_backfill_op( } } +std::unique_ptr RecoveryBackend::create( + const pg_pool_t& pool, + crimson::osd::PG& pg, + crimson::osd::ShardServices& shard_services, + crimson::os::CollectionRef coll, + PGBackend* backend) +{ + switch (pool.type) { + case pg_pool_t::TYPE_REPLICATED: + return std::make_unique( + pg, shard_services, coll, backend); + case pg_pool_t::TYPE_ERASURE: + return std::make_unique( + pg, shard_services, coll, backend); + default: + ceph_abort_msg(seastar::format( + "unsupported pool type '{}'", pool.type)); + } } + +} // namespace crimson::osd diff --git a/src/crimson/osd/recovery_backend.h b/src/crimson/osd/recovery_backend.h index 0b49604f3dc1..e1aef7c63d52 100644 --- a/src/crimson/osd/recovery_backend.h +++ b/src/crimson/osd/recovery_backend.h @@ -44,6 +44,14 @@ public: coll{coll}, backend{backend} {} virtual ~RecoveryBackend() {} + + static std::unique_ptr create( + const pg_pool_t& pool, + crimson::osd::PG& pg, + crimson::osd::ShardServices& shard_services, + crimson::os::CollectionRef coll, + PGBackend* backend); + std::pair add_recovering(const hobject_t& soid) { auto [it, added] = recovering.emplace(soid, new WaitForObjectRecovery(pg)); assert(it->second);