]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/.../snaptrim_event: convert SnapTrimObjSubEvent::start to a coroutine
authorSamuel Just <sjust@redhat.com>
Tue, 28 May 2024 20:47:48 +0000 (13:47 -0700)
committerSamuel Just <sjust@redhat.com>
Tue, 28 May 2024 20:48:32 +0000 (20:48 +0000)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/osd/osd_operations/snaptrim_event.cc

index e7686a63652ff657b3822a9790fad297dffe1fc4..1f2841361051da0aae37b56fcdc6348b40169335 100644 (file)
@@ -414,65 +414,67 @@ SnapTrimObjSubEvent::remove_or_update(
 SnapTrimObjSubEvent::snap_trim_obj_subevent_ret_t
 SnapTrimObjSubEvent::start()
 {
-  return enter_stage<interruptor>(
+  auto exit_handle = seastar::defer([this] {
+    logger().debug("{}: exit", *this);
+    handle.exit();
+  });
+
+  co_await enter_stage<interruptor>(
     client_pp().wait_for_active
-  ).then_interruptible([this] {
-    return with_blocking_event<PGActivationBlocker::BlockingEvent,
-                               interruptor>([this] (auto&& trigger) {
+  );
+
+  co_await with_blocking_event<PGActivationBlocker::BlockingEvent, interruptor>(
+    [this] (auto&& trigger) {
       return pg->wait_for_active_blocker.wait(std::move(trigger));
     });
-  }).then_interruptible([this] {
-    return enter_stage<interruptor>(
-      client_pp().recover_missing);
-  }).then_interruptible([] {
-    //return do_recover_missing(pg, get_target_oid());
-    return seastar::now();
-  }).then_interruptible([this] {
-    return enter_stage<interruptor>(
-      client_pp().get_obc);
-  }).then_interruptible([this] {
-    logger().debug("{}: getting obc for {}", *this, coid);
-    // end of commonality
-    // lock both clone's and head's obcs
-    return pg->obc_loader.with_obc<RWState::RWWRITE>(
-      coid,
-      [this](auto head_obc, auto clone_obc) {
+
+  co_await enter_stage<interruptor>(
+    client_pp().recover_missing);
+
+  // co_await do_recover_missing(pg, get_target_oid());
+
+  co_await enter_stage<interruptor>(
+    client_pp().get_obc);
+
+  logger().debug("{}: getting obc for {}", *this, coid);
+  // end of commonality
+  // lock both clone's and head's obcs
+  co_await pg->obc_loader.with_obc<RWState::RWWRITE>(
+    coid,
+    [this](auto head_obc, auto clone_obc) {
       logger().debug("{}: got clone_obc={}", *this, clone_obc->get_oid());
       return enter_stage<interruptor>(
         client_pp().process
       ).then_interruptible(
         [this,clone_obc=std::move(clone_obc), head_obc=std::move(head_obc)]() mutable {
-        logger().debug("{}: processing clone_obc={}", *this, clone_obc->get_oid());
-        return remove_or_update(
-          clone_obc, head_obc
-        ).safe_then_interruptible([clone_obc, this](auto&& txn) mutable {
-          auto [submitted, all_completed] = pg->submit_transaction(
-            std::move(clone_obc),
-            std::move(txn),
-            std::move(osd_op_p),
-            std::move(log_entries));
-          return submitted.then_interruptible(
-            [all_completed=std::move(all_completed), this] () mutable {
-            return enter_stage<interruptor>(
-              wait_repop
-            ).then_interruptible([all_completed=std::move(all_completed)] () mutable {
-              return std::move(all_completed);
-            });
-          });
-        });
-      });
+         logger().debug("{}: processing clone_obc={}", *this, clone_obc->get_oid());
+         return remove_or_update(
+           clone_obc, head_obc
+         ).safe_then_interruptible([clone_obc, this](auto&& txn) mutable {
+           auto [submitted, all_completed] = pg->submit_transaction(
+             std::move(clone_obc),
+             std::move(txn),
+             std::move(osd_op_p),
+             std::move(log_entries));
+           return submitted.then_interruptible(
+             [all_completed=std::move(all_completed), this] () mutable {
+               return enter_stage<interruptor>(
+                 wait_repop
+               ).then_interruptible([all_completed=std::move(all_completed)] () mutable {
+                 return std::move(all_completed);
+               });
+             });
+         });
+       });
     },
-    false).si_then([this] {
-      logger().debug("{}: completed", *this);
-      return handle.complete();
-    }).handle_error_interruptible(
-      remove_or_update_iertr::pass_further{},
-      crimson::ct_error::assert_all{"unexpected error in SnapTrimObjSubEvent"}
-    );
-  }).finally([this] {
-    logger().debug("{}: exit", *this);
-    handle.exit();
-  });
+    false
+  ).handle_error_interruptible(
+    remove_or_update_iertr::pass_further{},
+    crimson::ct_error::assert_all{"unexpected error in SnapTrimObjSubEvent"}
+  );
+
+  logger().debug("{}: completed", *this);
+  co_await interruptor::make_interruptible(handle.complete());
 }
 
 void SnapTrimObjSubEvent::print(std::ostream &lhs) const