]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/.../client_request_common: convert do_recover_missing to use coroutine
authorSamuel Just <sjust@redhat.com>
Thu, 3 Apr 2025 03:04:56 +0000 (03:04 +0000)
committerMatan Breizman <mbreizma@redhat.com>
Wed, 30 Apr 2025 08:22:09 +0000 (08:22 +0000)
Signed-off-by: Samuel Just <sjust@redhat.com>
(cherry picked from commit a85888fa6939f9feb6b7307d2d30afe4a87c3e48)

src/crimson/osd/osd_operations/client_request_common.cc

index e08ce13339c55491f1df4bb0051522d825155d9a..06b9d4f757f11bcf55eff912dc615ad7ae89153e 100644 (file)
@@ -1,6 +1,7 @@
 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:nil -*-
 // vim: ts=8 sw=2 smarttab expandtab
 
+#include "crimson/common/coroutine.h"
 #include "crimson/common/log.h"
 #include "crimson/osd/osd_operations/client_request_common.h"
 #include "crimson/osd/pg.h"
@@ -47,11 +48,11 @@ CommonClientRequest::do_recover_missing(
     DEBUGDPP(
       "reqid {} nothing to recover {}",
       *pg, reqid, soid);
-    return seastar::make_ready_future<bool>(false);
+    co_return false;
   }
 
   if (pg->get_peering_state().get_missing_loc().is_unfound(soid)) {
-    return seastar::make_ready_future<bool>(true);
+    co_return true;
   }
   DEBUGDPP(
     "reqid {} need to wait for recovery, {} version {}",
@@ -60,11 +61,10 @@ CommonClientRequest::do_recover_missing(
     DEBUGDPP(
       "reqid {} object {} version {}, already recovering",
       *pg, reqid, soid, ver);
-    return pg->get_recovery_backend()->get_recovering(
-      soid).wait_for_recovered(
-    ).then([] {
-      return seastar::make_ready_future<bool>(false);
-    });
+    co_await PG::interruptor::make_interruptible(
+      pg->get_recovery_backend()->get_recovering(
+       soid).wait_for_recovered());
+    co_return false;
   } else {
     DEBUGDPP(
       "reqid {} object {} version {}, starting recovery",
@@ -72,7 +72,8 @@ CommonClientRequest::do_recover_missing(
     auto [op, fut] =
       pg->get_shard_services().start_operation<UrgentRecovery>(
         soid, ver, pg, pg->get_shard_services(), pg->get_osdmap_epoch());
-    return fut.then([] { return seastar::make_ready_future<bool>(false); });
+    co_await PG::interruptor::make_interruptible(std::move(fut));
+    co_return false;
   }
 }