From e375b6425351910b52314e7a1ef7918c390c4e3a Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Wed, 19 Jul 2023 15:52:22 +0800 Subject: [PATCH] crimson/osd/osd_operations: add pipeline to LogMissingRequest to sync it with ReplicateRequest This commit is a follow-up for e14142894922b403344d7f08315b67a291b9a27a and f4d336a2dbf864fe798ca7f500d44576d3f626d5 Fixes: https://tracker.ceph.com/issues/61943 Signed-off-by: Xuehan Xu (cherry picked from commit 0b7c47db78cc22c7cf25c50b430674e17b01a601) --- .../osd/osd_operations/logmissing_request.cc | 13 ++++++++++++- src/crimson/osd/osd_operations/logmissing_request.h | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/crimson/osd/osd_operations/logmissing_request.cc b/src/crimson/osd/osd_operations/logmissing_request.cc index 630869d5d884f..739b464065006 100644 --- a/src/crimson/osd/osd_operations/logmissing_request.cc +++ b/src/crimson/osd/osd_operations/logmissing_request.cc @@ -61,7 +61,18 @@ seastar::future<> LogMissingRequest::with_pg( IRef ref = this; return interruptor::with_interruption([this, pg] { - return pg->do_update_log_missing(req, conn); + logger().debug("{}: pg present", *this); + return this->template enter_stage(client_pp(*pg).await_map + ).then_interruptible([this, pg] { + return this->template with_blocking_event< + PG_OSDMapGate::OSDMapBlocker::BlockingEvent + >([this, pg](auto &&trigger) { + return pg->osdmap_gate.wait_for_map( + std::move(trigger), req->min_epoch); + }); + }).then_interruptible([this, pg](auto) { + return pg->do_update_log_missing(req, conn); + }); }, [ref](std::exception_ptr) { return seastar::now(); }, pg); } diff --git a/src/crimson/osd/osd_operations/logmissing_request.h b/src/crimson/osd/osd_operations/logmissing_request.h index ebfc520ede713..71d0816fd201f 100644 --- a/src/crimson/osd/osd_operations/logmissing_request.h +++ b/src/crimson/osd/osd_operations/logmissing_request.h @@ -59,6 +59,8 @@ public: ConnectionPipeline::AwaitActive::BlockingEvent, ConnectionPipeline::AwaitMap::BlockingEvent, ConnectionPipeline::GetPG::BlockingEvent, + ClientRequest::PGPipeline::AwaitMap::BlockingEvent, + PG_OSDMapGate::OSDMapBlocker::BlockingEvent, PGMap::PGCreationBlockingEvent, OSD_OSDMapGate::OSDMapBlocker::BlockingEvent > tracking_events; -- 2.39.5