]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd: add BlockingEvent-aware variant of OSD::get_or_create_pg
authorRadosław Zarzyński <rzarzyns@redhat.com>
Wed, 20 Apr 2022 21:53:52 +0000 (23:53 +0200)
committerRadosław Zarzyński <rzarzyns@redhat.com>
Thu, 5 May 2022 02:06:32 +0000 (04:06 +0200)
Signed-off-by: Radosław Zarzyński <rzarzyns@redhat.com>
src/crimson/osd/osd.cc
src/crimson/osd/osd.h

index 6a49fa820ee03af7006746e5327e6c20a6d6068f..6640f502c655015f04b73fecbd0f97a0a544709f 100644 (file)
@@ -1430,6 +1430,25 @@ OSD::get_or_create_pg(
   }
 }
 
+seastar::future<Ref<PG>>
+OSD::get_or_create_pg(
+  PGMap::PGCreationBlockingEvent::TriggerI&& trigger,
+  spg_t pgid,
+  epoch_t epoch,
+  std::unique_ptr<PGCreateInfo> 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<Ref<PG>>(pg_map.get_pg(pgid));
+  }
+}
+
 blocking_future<Ref<PG>> OSD::wait_for_pg(
   spg_t pgid)
 {
index e144b6d89436426414b66019020b7df85929a656..9b4c9c8dc579804e5c9bdf09a9d49d684237f22a 100644 (file)
@@ -240,6 +240,11 @@ public:
     spg_t pgid,
     epoch_t epoch,
     std::unique_ptr<PGCreateInfo> info);
+  seastar::future<Ref<PG>> get_or_create_pg(
+    PGMap::PGCreationBlockingEvent::TriggerI&&,
+    spg_t pgid,
+    epoch_t epoch,
+    std::unique_ptr<PGCreateInfo> info);
   blocking_future<Ref<PG>> wait_for_pg(
     spg_t pgid);
   seastar::future<Ref<PG>> wait_for_pg(