From 313337983fe0a4e6966facac987ff73974c66be9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rados=C5=82aw=20Zarzy=C5=84ski?= Date: Fri, 15 Apr 2022 20:16:09 +0200 Subject: [PATCH] crimson/osd: migrate RepRequest to new tracking infra MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Radosław Zarzyński --- .../osd/osd_operations/replicated_request.cc | 17 ++++++--- .../osd/osd_operations/replicated_request.h | 35 ++++++++++++------- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/src/crimson/osd/osd_operations/replicated_request.cc b/src/crimson/osd/osd_operations/replicated_request.cc index 254f76103b83e..3a7068e47cc34 100644 --- a/src/crimson/osd/osd_operations/replicated_request.cc +++ b/src/crimson/osd/osd_operations/replicated_request.cc @@ -8,6 +8,7 @@ #include "crimson/osd/osd.h" #include "crimson/osd/osd_connection_priv.h" +#include "crimson/osd/osd_operation_external_tracking.h" #include "crimson/osd/pg.h" namespace { @@ -61,13 +62,19 @@ seastar::future<> RepRequest::start() logger().debug("{} start", *this); IRef ref = this; - return with_blocking_future(handle.enter(cp().await_map)) - .then([this]() { - return with_blocking_future(osd.osdmap_gate.wait_for_map(req->get_min_epoch())); + return enter_stage<>(cp().await_map).then([this] { + return with_blocking_event( + [this] (auto&& trigger) { + return osd.osdmap_gate.wait_for_map(std::move(trigger), + req->get_min_epoch()); + }); }).then([this](epoch_t epoch) { - return with_blocking_future(handle.enter(cp().get_pg)); + return enter_stage<>(cp().get_pg); }).then([this] { - return with_blocking_future(osd.wait_for_pg(req->get_spg())); + return with_blocking_event( + [this] (auto&& trigger) { + return osd.wait_for_pg(std::move(trigger), req->get_spg()); + }); }).then([this, ref=std::move(ref)](Ref pg) { return interruptor::with_interruption([this, ref, pg] { return pg->handle_rep_op(std::move(req)); diff --git a/src/crimson/osd/osd_operations/replicated_request.h b/src/crimson/osd/osd_operations/replicated_request.h index 94cd54fb1e870..4e8e97d7106f6 100644 --- a/src/crimson/osd/osd_operations/replicated_request.h +++ b/src/crimson/osd/osd_operations/replicated_request.h @@ -4,7 +4,9 @@ #pragma once #include "crimson/net/Connection.h" +#include "crimson/osd/osdmap_gate.h" #include "crimson/osd/osd_operation.h" +#include "crimson/osd/pg_map.h" #include "crimson/common/type_helpers.h" class MOSDRepOp; @@ -21,21 +23,23 @@ class PG; class RepRequest final : public PhasedOperationT { public: class ConnectionPipeline { - OrderedExclusivePhase await_map = { - "RepRequest::ConnectionPipeline::await_map" - }; - OrderedExclusivePhase get_pg = { - "RepRequest::ConnectionPipeline::get_pg" - }; + 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 { - OrderedExclusivePhase await_map = { - "RepRequest::PGPipeline::await_map" - }; - OrderedExclusivePhase process = { - "RepRequest::PGPipeline::process" - }; + struct AwaitMap : OrderedExclusivePhaseT { + static constexpr auto type_name = "RepRequest::PGPipeline::await_map"; + } await_map; + struct Process : OrderedExclusivePhaseT { + static constexpr auto type_name = "RepRequest::PGPipeline::process"; + } process; friend RepRequest; }; static constexpr OperationTypeCode type = OperationTypeCode::replicated_request; @@ -45,6 +49,13 @@ public: void dump_detail(ceph::Formatter* f) const final; seastar::future<> start(); + std::tuple< + ConnectionPipeline::AwaitMap::BlockingEvent, + OSD_OSDMapGate::OSDMapBlocker::BlockingEvent, + ConnectionPipeline::GetPG::BlockingEvent, + PGMap::PGCreationBlockingEvent + > tracking_events; + private: ConnectionPipeline &cp(); PGPipeline &pp(PG &pg); -- 2.39.5