From df5e76a26154d4b0c3a651e7f0b512aad6a2268e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rados=C5=82aw=20Zarzy=C5=84ski?= Date: Wed, 20 Apr 2022 23:53:52 +0200 Subject: [PATCH] crimson/osd: add BlockingEvent-aware variant of OSD::get_or_create_pg MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Radosław Zarzyński --- src/crimson/osd/osd.cc | 19 +++++++++++++++++++ src/crimson/osd/osd.h | 5 +++++ 2 files changed, 24 insertions(+) diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 6a49fa820ee03..6640f502c6550 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -1430,6 +1430,25 @@ OSD::get_or_create_pg( } } +seastar::future> +OSD::get_or_create_pg( + PGMap::PGCreationBlockingEvent::TriggerI&& trigger, + spg_t pgid, + epoch_t epoch, + std::unique_ptr info) +{ + if (info) { + auto [fut, creating] = pg_map.wait_for_pg(std::move(trigger), pgid); + if (!creating) { + pg_map.set_creating(pgid); + (void)handle_pg_create_info(std::move(info)); + } + return std::move(fut); + } else { + return seastar::make_ready_future>(pg_map.get_pg(pgid)); + } +} + blocking_future> OSD::wait_for_pg( spg_t pgid) { diff --git a/src/crimson/osd/osd.h b/src/crimson/osd/osd.h index e144b6d894364..9b4c9c8dc5798 100644 --- a/src/crimson/osd/osd.h +++ b/src/crimson/osd/osd.h @@ -240,6 +240,11 @@ public: spg_t pgid, epoch_t epoch, std::unique_ptr info); + seastar::future> get_or_create_pg( + PGMap::PGCreationBlockingEvent::TriggerI&&, + spg_t pgid, + epoch_t epoch, + std::unique_ptr info); blocking_future> wait_for_pg( spg_t pgid); seastar::future> wait_for_pg( -- 2.39.5