]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/.../transaction_manager: convert submit_transaction to coroutine
authorSamuel Just <sjust@redhat.com>
Thu, 21 Aug 2025 16:03:10 +0000 (09:03 -0700)
committerSamuel Just <sjust@redhat.com>
Fri, 5 Sep 2025 22:22:10 +0000 (15:22 -0700)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/transaction_manager.cc
src/crimson/os/seastore/transaction_manager.h

index 82532a565744457d70c4614569c8986c193cb057..24f8df98332c389bd907ef599e6449e07cdc1b03 100644 (file)
@@ -445,21 +445,24 @@ TransactionManager::submit_transaction(
 {
   LOG_PREFIX(TransactionManager::submit_transaction);
   SUBDEBUGT(seastore_t, "start, entering reserve_projected_usage", t);
-  return trans_intr::make_interruptible(
+  co_await trans_intr::make_interruptible(
     t.get_handle().enter(write_pipeline.reserve_projected_usage)
-  ).then_interruptible([this, FNAME, &t] {
-    auto dispatch_result = epm->dispatch_delayed_extents(t);
-    auto projected_usage = dispatch_result.usage;
-    SUBTRACET(seastore_t, "waiting for projected_usage: {}", t, projected_usage);
-    return trans_intr::make_interruptible(
-      epm->reserve_projected_usage(projected_usage)
-    ).then_interruptible([this, &t, dispatch_result = std::move(dispatch_result)] {
-      return do_submit_transaction(t, std::move(dispatch_result));
-    }).finally([this, FNAME, projected_usage, &t] {
-      SUBTRACET(seastore_t, "releasing projected_usage: {}", t, projected_usage);
-      epm->release_projected_usage(projected_usage);
-    });
+  );
+
+  auto dispatch_result = epm->dispatch_delayed_extents(t);
+  auto projected_usage = dispatch_result.usage;
+  SUBTRACET(seastore_t, "waiting for projected_usage: {}", t, projected_usage);
+  co_await trans_intr::make_interruptible(
+    epm->reserve_projected_usage(
+      projected_usage
+    )
+  );
+  auto release_usage = seastar::defer([this, FNAME, projected_usage, &t] {
+    SUBTRACET(seastore_t, "releasing projected_usage: {}", t, projected_usage);
+    epm->release_projected_usage(projected_usage);
   });
+
+  co_await do_submit_transaction(t, std::move(dispatch_result));
 }
 
 TransactionManager::submit_transaction_direct_ret
index ad391d39fd69bf3f4bd50b5e8913ce098ab4935d..9f2988ec8e2b41cfcf38d7f18cae9fba351ad057 100644 (file)
@@ -14,6 +14,7 @@
 #include <boost/smart_ptr/intrusive_ref_counter.hpp>
 
 #include <seastar/core/future.hh>
+#include <seastar/util/defer.hh>
 
 #include "include/ceph_assert.h"
 #include "include/buffer.h"