From: Radosław Zarzyński Date: Mon, 4 Sep 2023 17:16:29 +0000 (+0200) Subject: crimson/osd: instantiate an EC plugin X-Git-Tag: v21.0.0~3^2~87 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fbcfec382e3afc108830a31ade5d6f9cf2aedc4a;p=ceph.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 64b5fdff5e2e..c0732cb43eef 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -509,6 +509,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 00d75da778a5..021ecbd6f544 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 379e01f8eced..908d1eb76b90 100644 --- a/src/crimson/osd/ec_backend.cc +++ b/src/crimson/osd/ec_backend.cc @@ -12,22 +12,36 @@ 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, store_index_t store_index, - 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, store_index, 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 4bbcd4ef8771..72a572345809 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,