]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd: wire the EC-specific messages up
authorRadosław Zarzyński <rzarzyns@redhat.com>
Tue, 1 Aug 2023 13:52:08 +0000 (15:52 +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/crimson/osd/ec_backend.cc
src/crimson/osd/ec_backend.h
src/crimson/osd/osd.cc
src/crimson/osd/osd_operations/ecrep_request.cc
src/crimson/osd/osd_operations/ecrep_request.h

index 85bcb51e786a5e76108ce08424ea91d708318c1d..2f088d7e123abc1f8bb9d91bb987d590d04ed723 100644 (file)
@@ -38,4 +38,28 @@ ECBackend::submit_transaction(const std::set<pg_shard_t> &pg_shards,
   return make_ready_future<rep_op_ret_t>(seastar::now(), seastar::now());
 }
 
+ECBackend::write_iertr::future<>
+ECBackend::handle_rep_write_op(Ref<MOSDECSubOpWrite>)
+{
+  return write_iertr::now();
+}
+
+ECBackend::write_iertr::future<>
+ECBackend::handle_rep_write_reply(Ref<MOSDECSubOpWriteReply>)
+{
+  return write_iertr::now();
 }
+
+ECBackend::ll_read_ierrorator::future<>
+ECBackend::handle_rep_read_op(Ref<MOSDECSubOpRead> m)
+{
+  return ll_read_ierrorator::now();
+}
+
+ECBackend::ll_read_ierrorator::future<>
+ECBackend::handle_rep_read_reply(Ref<MOSDECSubOpReadReply>)
+{
+  return ll_read_ierrorator::now();
+}
+
+} // namespace crimson::osd
index 398d878cfc7a9171c0e64502b3a96b4efac5ebad..bcf433c4611279cda906574e915dc4ca37d5cd66 100644 (file)
@@ -6,6 +6,10 @@
 #include <boost/intrusive_ptr.hpp>
 #include <seastar/core/future.hh>
 #include "include/buffer_fwd.h"
+#include "messages/MOSDECSubOpWrite.h"
+#include "messages/MOSDECSubOpWriteReply.h"
+#include "messages/MOSDECSubOpRead.h"
+#include "messages/MOSDECSubOpReadReply.h"
 #include "osd/osd_types.h"
 #include "pg_backend.h"
 
@@ -24,6 +28,11 @@ public:
     return seastar::now();
   }
   void on_actingset_changed(bool same_primary) final {}
+
+  write_iertr::future<> handle_rep_write_op(Ref<MOSDECSubOpWrite>);
+  write_iertr::future<> handle_rep_write_reply(Ref<MOSDECSubOpWriteReply>);
+  ll_read_ierrorator::future<> handle_rep_read_op(Ref<MOSDECSubOpRead>);
+  ll_read_ierrorator::future<> handle_rep_read_reply(Ref<MOSDECSubOpReadReply>);
 private:
   ll_read_ierrorator::future<ceph::bufferlist>
   _read(const hobject_t& hoid, uint64_t off, uint64_t len, uint32_t flags) override;
index 7b9570283308af6753f60d892f3b87842afe193c..749b98bd59d9baf9dd4eab3d93e7e29a7de05272 100644 (file)
@@ -1008,13 +1008,13 @@ OSD::do_ms_dispatch(
     return handle_pg_pct(conn, boost::static_pointer_cast<
       MOSDPGPCT>(m));
   case MSG_OSD_EC_WRITE:
-    [[fallthrough]];
+    return handle_some_ec_messages(conn, boost::static_pointer_cast<MOSDECSubOpWrite>(m));
   case MSG_OSD_EC_WRITE_REPLY:
-    [[fallthrough]];
+    return handle_some_ec_messages(conn, boost::static_pointer_cast<MOSDECSubOpWriteReply>(m));
   case MSG_OSD_EC_READ:
-    [[fallthrough]];
+    return handle_some_ec_messages(conn, boost::static_pointer_cast<MOSDECSubOpRead>(m));
   case MSG_OSD_EC_READ_REPLY:
-    return handle_some_ec_messages(conn, m);
+    return handle_some_ec_messages(conn, boost::static_pointer_cast<MOSDECSubOpReadReply>(m));
 #if 0
   case MSG_OSD_PG_PUSH:
     [[fallthrough]];
index 4e9ed4808f876bff713ab4d02bf6e21a1c4a6557..4b359568f36418802d2332c224c1f5242a014864 100644 (file)
@@ -5,6 +5,7 @@
 
 #include "common/Formatter.h"
 
+#include "crimson/osd/ec_backend.h"
 #include "crimson/osd/osd.h"
 #include "crimson/osd/osd_connection_priv.h"
 #include "crimson/osd/osd_operation_external_tracking.h"
@@ -62,8 +63,30 @@ seastar::future<> ECRepRequest::with_pg(
   logger().debug("{}: ECRepRequest::with_pg", *this);
 
   IRef ref = this;
-  return interruptor::with_interruption([this, pg] {
-    return interruptor::now();
+  return interruptor::with_interruption(
+    [this, ec_backend=dynamic_cast<ECBackend*>(&pg->get_backend())] {
+    assert(ec_backend);
+    return std::visit(overloaded{
+      [ec_backend, this] (Ref<MOSDECSubOpWrite> concrete_req) {
+        return ec_backend->handle_rep_write_op(
+         std::move(concrete_req)
+       ).handle_error_interruptible(crimson::ct_error::assert_all{});
+      },
+      [ec_backend, this] (Ref<MOSDECSubOpWriteReply> concrete_req) {
+        return ec_backend->handle_rep_write_reply(
+         std::move(concrete_req)
+       ).handle_error_interruptible(crimson::ct_error::assert_all{});
+      },
+      [ec_backend, this] (Ref<MOSDECSubOpRead> concrete_req) {
+        return ec_backend->handle_rep_read_op(
+         std::move(concrete_req)
+       ).handle_error_interruptible(crimson::ct_error::assert_all{});
+      },
+      [ec_backend, this] (Ref<MOSDECSubOpReadReply> concrete_req) {
+        return ec_backend->handle_rep_read_reply(
+         std::move(concrete_req)
+       ).handle_error_interruptible(crimson::ct_error::assert_all{});
+      }}, req);
   }, [ref, this](std::exception_ptr) {
     logger().debug("{}: ECRepRequest::exception handling", *this);
     return seastar::now();
index 7192f22b35bc028158d1e8fcde18d2de651b5028..1584558f18243675fa5381c80bfb4d883e22637f 100644 (file)
 #include "crimson/osd/osd_operations/client_request.h"
 #include "crimson/osd/pg_map.h"
 #include "crimson/common/type_helpers.h"
+#include "messages/MOSDECSubOpWrite.h"
+#include "messages/MOSDECSubOpWriteReply.h"
+#include "messages/MOSDECSubOpRead.h"
+#include "messages/MOSDECSubOpReadReply.h"
 
 
 namespace ceph {