]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: route EC messages over PG
authorRadosław Zarzyński <rzarzyns@redhat.com>
Mon, 7 Aug 2023 13:22:38 +0000 (15:22 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 24 Mar 2026 16:06:23 +0000 (16:06 +0000)
The reason behind this change is to avoid mixing responsibilities.
Although in the classical OSD `ECBackend` handles virually everything
related to handling e.g.

Signed-off-by: Radosław Zarzyński <rzarzyns@redhat.com>
src/crimson/osd/osd_operations/ecrep_request.cc
src/crimson/osd/pg.cc
src/crimson/osd/pg.h

index 4b359568f36418802d2332c224c1f5242a014864..3b0b8fb2f6d3d775d1d84bfbbb0e51504925b282 100644 (file)
@@ -64,25 +64,21 @@ seastar::future<> ECRepRequest::with_pg(
 
   IRef ref = this;
   return interruptor::with_interruption(
-    [this, ec_backend=dynamic_cast<ECBackend*>(&pg->get_backend())] {
+    [this, pg, 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{});
+      [pg] (Ref<MOSDECSubOpWrite> concrete_req) {
+        return pg->handle_rep_write_op(std::move(concrete_req));
       },
-      [ec_backend, this] (Ref<MOSDECSubOpWriteReply> concrete_req) {
+      [ec_backend] (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{});
+      [pg] (Ref<MOSDECSubOpRead> concrete_req) {
+        return pg->handle_rep_read_op(std::move(concrete_req));
       },
-      [ec_backend, this] (Ref<MOSDECSubOpReadReply> concrete_req) {
+      [ec_backend] (Ref<MOSDECSubOpReadReply> concrete_req) {
         return ec_backend->handle_rep_read_reply(
          std::move(concrete_req)
        ).handle_error_interruptible(crimson::ct_error::assert_all{});
index 5c231e14ce11ec36e697b993972db4c74b469764..cd186d48dbdd76dbcb1922db396dddc8531a8533 100644 (file)
@@ -37,6 +37,7 @@
 #include "crimson/net/Messenger.h"
 #include "crimson/os/cyanstore/cyan_store.h"
 #include "crimson/os/futurized_collection.h"
+#include "crimson/osd/ec_backend.h"
 #include "crimson/osd/exceptions.h"
 #include "crimson/osd/pg_meta.h"
 #include "crimson/osd/pg_backend.h"
@@ -1443,6 +1444,24 @@ void PG::handle_rep_op_reply(const MOSDRepOpReply& m)
   }
 }
 
+PG::interruptible_future<> PG::handle_rep_write_op(Ref<MOSDECSubOpWrite> m)
+{
+  auto* ec_backend=dynamic_cast<::ECBackend*>(&get_backend());
+  assert(ec_backend);
+  return ec_backend->handle_rep_write_op(
+    std::move(m)
+  ).handle_error_interruptible(crimson::ct_error::assert_all{});
+}
+
+PG::interruptible_future<> PG::handle_rep_read_op(Ref<MOSDECSubOpRead> m)
+{
+  auto* ec_backend=dynamic_cast<::ECBackend*>(&get_backend());
+  assert(ec_backend);
+  return ec_backend->handle_rep_read_op(
+    std::move(m)
+  ).handle_error_interruptible(crimson::ct_error::assert_all{});
+}
+
 PG::interruptible_future<> PG::do_update_log_missing(
   Ref<MOSDPGUpdateLogMissing> m,
   crimson::net::ConnectionXcoreRef conn)
index 7665be13a2bbb2cf131ae33d6ceb20454baded01..14fd36805a6dcacfaff07ce99cb691873c4d8833 100644 (file)
@@ -705,6 +705,9 @@ public:
     ceph_tid_t rep_tid);
   seastar::future<> clear_temp_objects();
 
+  interruptible_future<> handle_rep_write_op(Ref<MOSDECSubOpWrite>);
+  interruptible_future<> handle_rep_read_op(Ref<MOSDECSubOpRead>);
+
 private:
 
   struct BackgroundProcessLock {