From: Radosław Zarzyński Date: Wed, 20 Apr 2022 21:53:52 +0000 (+0200) Subject: crimson/osd: add BlockingEvent-aware variant of OSD::get_or_create_pg X-Git-Tag: v18.0.0~947^2~13 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=df5e76a26154d4b0c3a651e7f0b512aad6a2268e;p=ceph-ci.git crimson/osd: add BlockingEvent-aware variant of OSD::get_or_create_pg Signed-off-by: Radosław Zarzyński --- diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 6a49fa820ee..6640f502c65 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 e144b6d8943..9b4c9c8dc57 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(