From 33e4590d4358b7cb55c6561e6f2726c2122504aa Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rados=C5=82aw=20Zarzy=C5=84ski?= Date: Wed, 6 Apr 2022 00:42:38 +0200 Subject: [PATCH] crimson/osd: switch one OSDMapGate of ClientRequest to new blocking infra MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This time the demo of `BlockerT::BlockingEvent::TriggerI` which is supposed to handle situations where: 1) `BlockerT` is separated from `TrackableOperationT` by many intermediaries while 2) we don't want to templatize them all. Signed-off-by: Radosław Zarzyński --- src/crimson/osd/osd_operations/client_request.cc | 8 +++++--- src/crimson/osd/osd_operations/client_request.h | 4 +++- src/crimson/osd/osdmap_gate.h | 1 + 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/crimson/osd/osd_operations/client_request.cc b/src/crimson/osd/osd_operations/client_request.cc index fd6c20a3b4a..229a727c373 100644 --- a/src/crimson/osd/osd_operations/client_request.cc +++ b/src/crimson/osd/osd_operations/client_request.cc @@ -80,9 +80,11 @@ seastar::future<> ClientRequest::start() return seastar::repeat([this, opref=IRef{this}]() mutable { logger().debug("{}: in repeat", *this); return enter_stage(cp().await_map).then([this]() { - return with_blocking_future( - osd.osdmap_gate.wait_for_map( - m->get_min_epoch())); + return with_blocking_event( + [this](auto&& trigger) { + return osd.osdmap_gate.wait_for_map(std::move(trigger), + m->get_min_epoch()); + }); }).then([this](epoch_t epoch) { return with_blocking_future(handle.enter(cp().get_pg)); }).then([this] { diff --git a/src/crimson/osd/osd_operations/client_request.h b/src/crimson/osd/osd_operations/client_request.h index c37fc2e6414..a0e1f7acefe 100644 --- a/src/crimson/osd/osd_operations/client_request.h +++ b/src/crimson/osd/osd_operations/client_request.h @@ -6,6 +6,7 @@ #include "osd/osd_op_util.h" #include "crimson/net/Connection.h" #include "crimson/osd/object_context.h" +#include "crimson/osd/osdmap_gate.h" #include "crimson/osd/osd_operation.h" #include "crimson/osd/osd_operations/client_request_common.h" #include "crimson/osd/osd_operations/common/pg_pipeline.h" @@ -103,7 +104,8 @@ private: public: std::tuple< - ConnectionPipeline::AwaitMap::BlockingEvent + ConnectionPipeline::AwaitMap::BlockingEvent, + OSD_OSDMapGate::OSDMapBlocker::BlockingEvent > tracking_events; }; diff --git a/src/crimson/osd/osdmap_gate.h b/src/crimson/osd/osdmap_gate.h index de02d296eed..f378b28825a 100644 --- a/src/crimson/osd/osdmap_gate.h +++ b/src/crimson/osd/osdmap_gate.h @@ -66,6 +66,7 @@ public: // wait for an osdmap whose epoch is greater or equal to given epoch blocking_future wait_for_map(epoch_t epoch); + // TODO: define me! seastar::future wait_for_map(typename OSDMapBlocker::BlockingEvent::TriggerI&& trigger, epoch_t epoch); -- 2.39.5