]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd: instantiate an EC plugin
authorRadosław Zarzyński <rzarzyns@redhat.com>
Mon, 4 Sep 2023 17:16:29 +0000 (19:16 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 27 Jan 2026 14:37:36 +0000 (14:37 +0000)
Signed-off-by: Radosław Zarzyński <rzarzyns@redhat.com>
src/CMakeLists.txt
src/crimson/osd/CMakeLists.txt
src/crimson/osd/ec_backend.cc
src/crimson/osd/ec_backend.h

index 51842026837377ff3b6a1df2ef80cf970adca1c1..87977c6f7cbf56d9759d9e2bdb2e84009593dcee 100644 (file)
@@ -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)
index 00d75da778a597a37909ec6d82f1ccb469a8c593..021ecbd6f544bc84aa3c70e54a94ad8c434c5e1a 100644 (file)
@@ -73,6 +73,7 @@ target_link_libraries(crimson-osd
   crimson-common
   crimson-os
   crimson
+  erasure_code
   ${FMT_LIB}
   Boost::MPL
   dmclock::dmclock)
index 9342a61b5f12638e8ae48c88250ac8c11485f228..7e479e5e9ea5b80fc080e00aa8b8563ca69f6f83 100644 (file)
@@ -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_t&>(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<ceph::bufferlist>
index d162fdc65310881e180403dadcc95fc8059bd820..3b637a4d3464399daad021bf2d375615fcced9f0 100644 (file)
@@ -6,6 +6,7 @@
 #include <boost/intrusive_ptr.hpp>
 #include <seastar/core/future.hh>
 #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,