From: Matan Breizman Date: Wed, 3 Jun 2026 09:43:19 +0000 (+0000) Subject: crimson/os/seastore: move reset_preserve_handle to retry prepare step X-Git-Tag: v21.0.1~19^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=eca68d7fd460329db5bf57836f8c56363891cfb1;p=ceph.git crimson/os/seastore: move reset_preserve_handle to retry prepare step do_transaction_no_callbacks() relied on with_repeat_trans_intr() implicitly resetting the transaction before every retry attempt. That behavior is policy, not retry mechanics, so it should live with the caller. Signed-off-by: Matan Breizman --- diff --git a/src/crimson/os/seastore/seastore.cc b/src/crimson/os/seastore/seastore.cc index b7db30592dd..bc3744b15d0 100644 --- a/src/crimson/os/seastore/seastore.cc +++ b/src/crimson/os/seastore/seastore.cc @@ -1652,6 +1652,10 @@ seastar::future<> SeaStore::Shard::do_transaction_no_callbacks( ++(shard_stats.processing_inlock_io_num); co_await with_repeat_trans_intr( + [&, this] { + // Preserve handle and rewind the external iterator before each attempt. + ctx.reset_preserve_handle(*transaction_manager); + }, *ctx.transaction, seastar::coroutine::lambda([&ctx, this, FNAME](auto &t) -> tm_ret { @@ -1674,7 +1678,6 @@ seastar::future<> SeaStore::Shard::do_transaction_no_callbacks( ctx.iter.colls.size(), ctx.iter.objects.size()); - ctx.reset_preserve_handle(*transaction_manager); std::vector onodes(ctx.iter.objects.size()); // Get the total number of operations from the transaction