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) {
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,
// 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,
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&,
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&,
}, tracking_events);
}
-ClientRequest::ConnectionPipeline &ClientRequest::cp()
+ConnectionPipeline &ClientRequest::cp()
{
return get_osd_priv(conn.get()).client_request_conn_pipeline;
}
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";
public:
std::tuple<
StartEvent,
+ ConnectionPipeline::AwaitActive::BlockingEvent,
ConnectionPipeline::AwaitMap::BlockingEvent,
OSD_OSDMapGate::OSDMapBlocker::BlockingEvent,
ConnectionPipeline::GetPG::BlockingEvent,
std::move(ctx));
}
-RemotePeeringEvent::ConnectionPipeline &RemotePeeringEvent::cp()
+ConnectionPipeline &RemotePeeringEvent::cp()
{
return get_osd_priv(conn.get()).peering_request_conn_pipeline;
}
} 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) :
std::tuple<
StartEvent,
+ ConnectionPipeline::AwaitActive::BlockingEvent,
ConnectionPipeline::AwaitMap::BlockingEvent,
OSD_OSDMapGate::OSDMapBlocker::BlockingEvent,
ConnectionPipeline::GetPG::BlockingEvent,
f->close_section();
}
-RepRequest::ConnectionPipeline &RepRequest::cp()
+ConnectionPipeline &RepRequest::cp()
{
return get_osd_priv(conn.get()).replicated_request_conn_pipeline;
}
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";