From 557adf64e2dd6c2360f366e0dc3e8e360e380d0b Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 10 Feb 2022 18:33:34 -0800 Subject: [PATCH] crimson/osd: consolidate connection pipeline definitions Really, all pg routable events (peering events, client operations, etc) should have the same sequence of pre-pg blockers. Signed-off-by: Samuel Just --- src/crimson/osd/osd_connection_priv.h | 6 +++--- src/crimson/osd/osd_operation.h | 18 ++++++++++++++++++ .../osd/osd_operation_external_tracking.h | 18 ++++++++++++------ .../osd/osd_operations/client_request.cc | 2 +- .../osd/osd_operations/client_request.h | 16 +--------------- .../osd/osd_operations/peering_event.cc | 2 +- src/crimson/osd/osd_operations/peering_event.h | 12 +----------- .../osd/osd_operations/replicated_request.cc | 2 +- .../osd/osd_operations/replicated_request.h | 11 ----------- 9 files changed, 38 insertions(+), 49 deletions(-) diff --git a/src/crimson/osd/osd_connection_priv.h b/src/crimson/osd/osd_connection_priv.h index b70c2e1259d..32d677d9652 100644 --- a/src/crimson/osd/osd_connection_priv.h +++ b/src/crimson/osd/osd_connection_priv.h @@ -14,9 +14,9 @@ namespace crimson::osd { struct OSDConnectionPriv : public crimson::net::Connection::user_private_t { OpSequencers op_sequencer; - ClientRequest::ConnectionPipeline client_request_conn_pipeline; - RemotePeeringEvent::ConnectionPipeline peering_request_conn_pipeline; - RepRequest::ConnectionPipeline replicated_request_conn_pipeline; + ConnectionPipeline client_request_conn_pipeline; + ConnectionPipeline peering_request_conn_pipeline; + ConnectionPipeline replicated_request_conn_pipeline; }; static OSDConnectionPriv &get_osd_priv(crimson::net::Connection *conn) { diff --git a/src/crimson/osd/osd_operation.h b/src/crimson/osd/osd_operation.h index 6fc3071f54d..bbc5600c59c 100644 --- a/src/crimson/osd/osd_operation.h +++ b/src/crimson/osd/osd_operation.h @@ -15,6 +15,24 @@ namespace crimson::os::seastore { namespace crimson::osd { +/// Ordering stages for a class of operations ordered by PG. +struct ConnectionPipeline { + struct AwaitActive : OrderedExclusivePhaseT { + static constexpr auto type_name = + "ConnectionPipeline::await_active"; + } await_active; + + struct AwaitMap : OrderedExclusivePhaseT { + static constexpr auto type_name = + "ConnectionPipeline::await_map"; + } await_map; + + struct GetPG : OrderedExclusivePhaseT { + static constexpr auto type_name = + "ConnectionPipeline::get_pg"; + } get_pg; +}; + enum class OperationTypeCode { client_request = 0, peering_event, diff --git a/src/crimson/osd/osd_operation_external_tracking.h b/src/crimson/osd/osd_operation_external_tracking.h index 5c64721034e..1e946db95fb 100644 --- a/src/crimson/osd/osd_operation_external_tracking.h +++ b/src/crimson/osd/osd_operation_external_tracking.h @@ -19,9 +19,10 @@ namespace crimson::osd { // Just the boilerplate currently. Implementing struct LttngBackend : ClientRequest::StartEvent::Backend, - ClientRequest::ConnectionPipeline::AwaitMap::BlockingEvent::Backend, + ConnectionPipeline::AwaitActive::BlockingEvent::Backend, + ConnectionPipeline::AwaitMap::BlockingEvent::Backend, + ConnectionPipeline::GetPG::BlockingEvent::Backend, OSD_OSDMapGate::OSDMapBlocker::BlockingEvent::Backend, - ClientRequest::ConnectionPipeline::GetPG::BlockingEvent::Backend, PGMap::PGCreationBlockingEvent::Backend, ClientRequest::PGPipeline::AwaitMap::BlockingEvent::Backend, PG_OSDMapGate::OSDMapBlocker::BlockingEvent::Backend, @@ -38,9 +39,14 @@ struct LttngBackend void handle(ClientRequest::StartEvent&, const Operation&) override {} - void handle(ClientRequest::ConnectionPipeline::AwaitMap::BlockingEvent& ev, + void handle(ConnectionPipeline::AwaitActive::BlockingEvent& ev, const Operation& op, - const ClientRequest::ConnectionPipeline::AwaitMap& blocker) override { + const ConnectionPipeline::AwaitActive& blocker) override { + } + + void handle(ConnectionPipeline::AwaitMap::BlockingEvent& ev, + const Operation& op, + const ConnectionPipeline::AwaitMap& blocker) override { } void handle(OSD_OSDMapGate::OSDMapBlocker::BlockingEvent&, @@ -48,9 +54,9 @@ struct LttngBackend const OSD_OSDMapGate::OSDMapBlocker&) override { } - void handle(ClientRequest::ConnectionPipeline::GetPG::BlockingEvent& ev, + void handle(ConnectionPipeline::GetPG::BlockingEvent& ev, const Operation& op, - const ClientRequest::ConnectionPipeline::GetPG& blocker) override { + const ConnectionPipeline::GetPG& blocker) override { } void handle(PGMap::PGCreationBlockingEvent&, diff --git a/src/crimson/osd/osd_operations/client_request.cc b/src/crimson/osd/osd_operations/client_request.cc index 7a7e6286f51..b6ac8604046 100644 --- a/src/crimson/osd/osd_operations/client_request.cc +++ b/src/crimson/osd/osd_operations/client_request.cc @@ -49,7 +49,7 @@ void ClientRequest::dump_detail(Formatter *f) const }, tracking_events); } -ClientRequest::ConnectionPipeline &ClientRequest::cp() +ConnectionPipeline &ClientRequest::cp() { return get_osd_priv(conn.get()).client_request_conn_pipeline; } diff --git a/src/crimson/osd/osd_operations/client_request.h b/src/crimson/osd/osd_operations/client_request.h index 024b514db65..a081f460955 100644 --- a/src/crimson/osd/osd_operations/client_request.h +++ b/src/crimson/osd/osd_operations/client_request.h @@ -27,21 +27,6 @@ class ClientRequest final : public PhasedOperationT, OpInfo op_info; public: - class ConnectionPipeline { - struct AwaitMap : OrderedExclusivePhaseT { - static constexpr auto type_name = - "ClientRequest::ConnectionPipeline::await_map"; - } await_map; - - struct GetPG : OrderedExclusivePhaseT { - static constexpr auto type_name = - "ClientRequest::ConnectionPipeline::get_pg"; - } get_pg; - - friend class ClientRequest; - friend class LttngBackend; - }; - class PGPipeline : public CommonPGPipeline { struct AwaitMap : OrderedExclusivePhaseT { static constexpr auto type_name = "ClientRequest::PGPipeline::await_map"; @@ -109,6 +94,7 @@ private: public: std::tuple< StartEvent, + ConnectionPipeline::AwaitActive::BlockingEvent, ConnectionPipeline::AwaitMap::BlockingEvent, OSD_OSDMapGate::OSDMapBlocker::BlockingEvent, ConnectionPipeline::GetPG::BlockingEvent, diff --git a/src/crimson/osd/osd_operations/peering_event.cc b/src/crimson/osd/osd_operations/peering_event.cc index 4877a05cfc1..19cf992031c 100644 --- a/src/crimson/osd/osd_operations/peering_event.cc +++ b/src/crimson/osd/osd_operations/peering_event.cc @@ -128,7 +128,7 @@ PeeringEvent::complete_rctx(Ref pg) std::move(ctx)); } -RemotePeeringEvent::ConnectionPipeline &RemotePeeringEvent::cp() +ConnectionPipeline &RemotePeeringEvent::cp() { return get_osd_priv(conn.get()).peering_request_conn_pipeline; } diff --git a/src/crimson/osd/osd_operations/peering_event.h b/src/crimson/osd/osd_operations/peering_event.h index 8d0aa26d450..ac81345a76d 100644 --- a/src/crimson/osd/osd_operations/peering_event.h +++ b/src/crimson/osd/osd_operations/peering_event.h @@ -117,17 +117,6 @@ public: } await_active; friend class RemotePeeringEvent; }; - class ConnectionPipeline { - struct AwaitMap : OrderedExclusivePhaseT { - static constexpr auto type_name = - "PeeringRequest::ConnectionPipeline::await_map"; - } await_map; - struct GetPG : OrderedExclusivePhaseT { - static constexpr auto type_name = - "PeeringRequest::ConnectionPipeline::get_pg"; - } get_pg; - friend class RemotePeeringEvent; - }; template RemotePeeringEvent(OSD &osd, crimson::net::ConnectionRef conn, Args&&... args) : @@ -143,6 +132,7 @@ public: std::tuple< StartEvent, + ConnectionPipeline::AwaitActive::BlockingEvent, ConnectionPipeline::AwaitMap::BlockingEvent, OSD_OSDMapGate::OSDMapBlocker::BlockingEvent, ConnectionPipeline::GetPG::BlockingEvent, diff --git a/src/crimson/osd/osd_operations/replicated_request.cc b/src/crimson/osd/osd_operations/replicated_request.cc index 3a7068e47cc..3a8c3f9a117 100644 --- a/src/crimson/osd/osd_operations/replicated_request.cc +++ b/src/crimson/osd/osd_operations/replicated_request.cc @@ -47,7 +47,7 @@ void RepRequest::dump_detail(Formatter *f) const f->close_section(); } -RepRequest::ConnectionPipeline &RepRequest::cp() +ConnectionPipeline &RepRequest::cp() { return get_osd_priv(conn.get()).replicated_request_conn_pipeline; } diff --git a/src/crimson/osd/osd_operations/replicated_request.h b/src/crimson/osd/osd_operations/replicated_request.h index 4e8e97d7106..f07bc86105a 100644 --- a/src/crimson/osd/osd_operations/replicated_request.h +++ b/src/crimson/osd/osd_operations/replicated_request.h @@ -22,17 +22,6 @@ class PG; class RepRequest final : public PhasedOperationT { public: - class ConnectionPipeline { - struct AwaitMap : OrderedExclusivePhaseT { - static constexpr auto type_name = - "RepRequest::ConnectionPipeline::await_map"; - } await_map; - struct GetPG : OrderedExclusivePhaseT { - static constexpr auto type_name = - "RepRequest::ConnectionPipeline::get_pg"; - } get_pg; - friend RepRequest; - }; class PGPipeline { struct AwaitMap : OrderedExclusivePhaseT { static constexpr auto type_name = "RepRequest::PGPipeline::await_map"; -- 2.39.5