]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.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, 27 Jan 2026 14:37:36 +0000 (14:37 +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 d327aefaa925436af0e796c00dd99d1e27196998..7a11316e0a20a1f4679af1a1221e3c7879577f4d 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"
@@ -1425,6 +1426,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 a298618eb63b701c41c78dfceb980a05a0515413..ecdb72b5ae590d70e815cd81a5363d0055d4d7a7 100644 (file)
@@ -697,6 +697,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 {