From: Radosław Zarzyński Date: Mon, 7 Aug 2023 13:22:38 +0000 (+0200) Subject: crimson/osd: route EC messages over PG X-Git-Tag: v21.0.0~3^2~88 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a0718b448b9017b832b6e89a9fd98da17e88ddfe;p=ceph.git crimson/osd: route EC messages over PG 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 --- diff --git a/src/crimson/osd/osd_operations/ecrep_request.cc b/src/crimson/osd/osd_operations/ecrep_request.cc index 4b359568f364..3b0b8fb2f6d3 100644 --- a/src/crimson/osd/osd_operations/ecrep_request.cc +++ b/src/crimson/osd/osd_operations/ecrep_request.cc @@ -64,25 +64,21 @@ seastar::future<> ECRepRequest::with_pg( IRef ref = this; return interruptor::with_interruption( - [this, ec_backend=dynamic_cast(&pg->get_backend())] { + [this, pg, ec_backend=dynamic_cast(&pg->get_backend())] { assert(ec_backend); return std::visit(overloaded{ - [ec_backend, this] (Ref concrete_req) { - return ec_backend->handle_rep_write_op( - std::move(concrete_req) - ).handle_error_interruptible(crimson::ct_error::assert_all{}); + [pg] (Ref concrete_req) { + return pg->handle_rep_write_op(std::move(concrete_req)); }, - [ec_backend, this] (Ref concrete_req) { + [ec_backend] (Ref 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 concrete_req) { - return ec_backend->handle_rep_read_op( - std::move(concrete_req) - ).handle_error_interruptible(crimson::ct_error::assert_all{}); + [pg] (Ref concrete_req) { + return pg->handle_rep_read_op(std::move(concrete_req)); }, - [ec_backend, this] (Ref concrete_req) { + [ec_backend] (Ref concrete_req) { return ec_backend->handle_rep_read_reply( std::move(concrete_req) ).handle_error_interruptible(crimson::ct_error::assert_all{}); diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index 5c231e14ce11..cd186d48dbdd 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -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 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 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 m, crimson::net::ConnectionXcoreRef conn) diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index 7665be13a2bb..14fd36805a6d 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -705,6 +705,9 @@ public: ceph_tid_t rep_tid); seastar::future<> clear_temp_objects(); + interruptible_future<> handle_rep_write_op(Ref); + interruptible_future<> handle_rep_read_op(Ref); + private: struct BackgroundProcessLock {