]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd: consolidate connection pipeline definitions
authorSamuel Just <sjust@redhat.com>
Fri, 11 Feb 2022 02:33:34 +0000 (18:33 -0800)
committerSamuel Just <sjust@redhat.com>
Fri, 6 May 2022 02:38:21 +0000 (02:38 +0000)
Really, all pg routable events (peering events, client operations, etc)
should have the same sequence of pre-pg blockers.

Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/osd/osd_connection_priv.h
src/crimson/osd/osd_operation.h
src/crimson/osd/osd_operation_external_tracking.h
src/crimson/osd/osd_operations/client_request.cc
src/crimson/osd/osd_operations/client_request.h
src/crimson/osd/osd_operations/peering_event.cc
src/crimson/osd/osd_operations/peering_event.h
src/crimson/osd/osd_operations/replicated_request.cc
src/crimson/osd/osd_operations/replicated_request.h

index b70c2e1259d99a17fe38d417a91699ca494bedf3..32d677d9652f49b91135369f3c57ab9dc4904681 100644 (file)
@@ -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) {
index 6fc3071f54dd0e61ce0c93b548736fb573f0bd9d..bbc5600c59c1e75a6f2022cf4203b88197824397 100644 (file)
@@ -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<AwaitActive> {
+    static constexpr auto type_name =
+      "ConnectionPipeline::await_active";
+  } await_active;
+
+  struct AwaitMap : OrderedExclusivePhaseT<AwaitMap> {
+    static constexpr auto type_name =
+      "ConnectionPipeline::await_map";
+  } await_map;
+
+  struct GetPG : OrderedExclusivePhaseT<GetPG> {
+    static constexpr auto type_name =
+      "ConnectionPipeline::get_pg";
+  } get_pg;
+};
+
 enum class OperationTypeCode {
   client_request = 0,
   peering_event,
index 5c64721034e1302f1b5ab8d65e5287f393ae9a69..1e946db95fb4020921e3497753ff5b6ac083a3f9 100644 (file)
@@ -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&,
index 7a7e6286f5143519ab9190ff3120cdb968c22dbe..b6ac8604046546472b6e7881405f4759930bd18c 100644 (file)
@@ -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;
 }
index 024b514db65bae5d9cb90d60c054abed1eb59eef..a081f46095529d8777598b774af3122f16f17e1c 100644 (file)
@@ -27,21 +27,6 @@ class ClientRequest final : public PhasedOperationT<ClientRequest>,
   OpInfo op_info;
 
 public:
-  class ConnectionPipeline {
-    struct AwaitMap : OrderedExclusivePhaseT<AwaitMap> {
-      static constexpr auto type_name =
-        "ClientRequest::ConnectionPipeline::await_map";
-    } await_map;
-
-    struct GetPG : OrderedExclusivePhaseT<GetPG> {
-      static constexpr auto type_name =
-        "ClientRequest::ConnectionPipeline::get_pg";
-    } get_pg;
-
-    friend class ClientRequest;
-    friend class LttngBackend;
-  };
-
   class PGPipeline : public CommonPGPipeline {
     struct AwaitMap : OrderedExclusivePhaseT<AwaitMap> {
       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,
index 4877a05cfc1be9b542ef64c9b1af2e97e00adb13..19cf992031c6c0d3becf354ecc01d2aa7d21b031 100644 (file)
@@ -128,7 +128,7 @@ PeeringEvent<T>::complete_rctx(Ref<PG> pg)
     std::move(ctx));
 }
 
-RemotePeeringEvent::ConnectionPipeline &RemotePeeringEvent::cp()
+ConnectionPipeline &RemotePeeringEvent::cp()
 {
   return get_osd_priv(conn.get()).peering_request_conn_pipeline;
 }
index 8d0aa26d4505a83439809d1571bc87156443d7d6..ac81345a76d0306030f5f2501ea0ff8aef8186ca 100644 (file)
@@ -117,17 +117,6 @@ public:
     } await_active;
     friend class RemotePeeringEvent;
   };
-  class ConnectionPipeline {
-    struct AwaitMap : OrderedExclusivePhaseT<AwaitMap> {
-      static constexpr auto type_name =
-       "PeeringRequest::ConnectionPipeline::await_map";
-    } await_map;
-    struct GetPG : OrderedExclusivePhaseT<GetPG> {
-      static constexpr auto type_name =
-       "PeeringRequest::ConnectionPipeline::get_pg";
-    } get_pg;
-    friend class RemotePeeringEvent;
-  };
 
   template <typename... Args>
   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,
index 3a7068e47cc345ad9d38ae6af80c26cd2d235151..3a8c3f9a117b9fe2a0f966c2a9b826a50be8a77f 100644 (file)
@@ -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;
 }
index 4e8e97d7106f6fbc8b15639c2899ded4c2576d44..f07bc86105ab1e8e3d6a929e9d3e0b4ac816fcaf 100644 (file)
@@ -22,17 +22,6 @@ class PG;
 
 class RepRequest final : public PhasedOperationT<RepRequest> {
 public:
-  class ConnectionPipeline {
-    struct AwaitMap : OrderedExclusivePhaseT<AwaitMap> {
-      static constexpr auto type_name =
-       "RepRequest::ConnectionPipeline::await_map";
-    } await_map;
-    struct GetPG : OrderedExclusivePhaseT<GetPG> {
-      static constexpr auto type_name =
-       "RepRequest::ConnectionPipeline::get_pg";
-    } get_pg;
-    friend RepRequest;
-  };
   class PGPipeline {
     struct AwaitMap : OrderedExclusivePhaseT<AwaitMap> {
       static constexpr auto type_name = "RepRequest::PGPipeline::await_map";