From: Radosław Zarzyński Date: Mon, 4 Sep 2023 17:16:29 +0000 (+0200) Subject: crimson/osd: instantiate an EC plugin X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f3c697e302d4e4be7452f4b61a0842db791d83a3;p=ceph-ci.git crimson/osd: instantiate an EC plugin Signed-off-by: Radosław Zarzyński --- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 51842026837..87977c6f7cb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -503,6 +503,7 @@ if(WITH_CRIMSON) "-Wno-pessimizing-move" "-Wno-address-of-packed-member") add_subdirectory(crimson) + add_dependencies(crimson-osd erasure_code) endif() include(CheckTypeSize) diff --git a/src/crimson/osd/CMakeLists.txt b/src/crimson/osd/CMakeLists.txt index 00d75da778a..021ecbd6f54 100644 --- a/src/crimson/osd/CMakeLists.txt +++ b/src/crimson/osd/CMakeLists.txt @@ -73,6 +73,7 @@ target_link_libraries(crimson-osd crimson-common crimson-os crimson + erasure_code ${FMT_LIB} Boost::MPL dmclock::dmclock) diff --git a/src/crimson/osd/ec_backend.cc b/src/crimson/osd/ec_backend.cc index 9342a61b5f1..7e479e5e9ea 100644 --- a/src/crimson/osd/ec_backend.cc +++ b/src/crimson/osd/ec_backend.cc @@ -12,21 +12,35 @@ namespace { namespace crimson::osd { +ceph::ErasureCodeInterfaceRef ECBackend::create_ec_impl( + const ec_profile_t& ec_profile) +{ + using crimson::common::local_conf; + ceph::ErasureCodeInterfaceRef ec_impl; + std::stringstream ss; + ceph::ErasureCodePluginRegistry::instance().factory( + ec_profile.find("plugin")->second, + local_conf()->erasure_code_dir, + const_cast(ec_profile), + &ec_impl, + &ss); + return ec_impl; +} + ECBackend::ECBackend(pg_shard_t whoami, ECBackend::CollectionRef coll, crimson::osd::ShardServices& shard_services, - const ec_profile_t&, + const ec_profile_t& ec_profile, uint64_t stripe_width, bool fast_read, bool allows_ecoverwrites, DoutPrefixProvider &dpp) : PGBackend{whoami, coll, shard_services, dpp}, + ec_impl{create_ec_impl(ec_profile)}, sinfo{ec_impl->get_data_chunk_count(), stripe_width}, fast_read{fast_read}, allows_ecoverwrites{allows_ecoverwrites} { - // FIXME: ec_impl - // todo } ECBackend::ll_read_ierrorator::future diff --git a/src/crimson/osd/ec_backend.h b/src/crimson/osd/ec_backend.h index d162fdc6531..3b637a4d346 100644 --- a/src/crimson/osd/ec_backend.h +++ b/src/crimson/osd/ec_backend.h @@ -6,6 +6,7 @@ #include #include #include "erasure-code/ErasureCodeInterface.h" +#include "erasure-code/ErasureCodePlugin.h" #include "include/buffer_fwd.h" #include "messages/MOSDECSubOpWrite.h" #include "messages/MOSDECSubOpWriteReply.h" @@ -19,6 +20,9 @@ namespace crimson::osd { class ECBackend : public PGBackend { + static ceph::ErasureCodeInterfaceRef create_ec_impl( + const ec_profile_t& ec_profile); + public: ECBackend(pg_shard_t whoami, CollectionRef coll,