summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/resharding/resharding_future_util.cpp
diff options
context:
space:
mode:
authorLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-11 15:07:35 -0300
committerLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-11 15:07:35 -0300
commit4cb8841196d0625dfa3825aa326f071cd27c7b8b (patch)
tree1682a647d4463397c119183369ae6f750d5fdcff /src/mongo/db/s/resharding/resharding_future_util.cpp
parentaa03c6362cbaa767638e6eed9b031d86dd2643d1 (diff)
parent8f0827553e09872941945a093b647a4211a9db7f (diff)
Update upstream source from tag 'upstream/6.0.0'master
Update to upstream version '6.0.0' with Debian dir 5604a80ec1c96ca76f25f40d78e6ef855abec322
Diffstat (limited to 'src/mongo/db/s/resharding/resharding_future_util.cpp')
-rw-r--r--src/mongo/db/s/resharding/resharding_future_util.cpp33
1 files changed, 5 insertions, 28 deletions
diff --git a/src/mongo/db/s/resharding/resharding_future_util.cpp b/src/mongo/db/s/resharding/resharding_future_util.cpp
index 62c95fbaf3f..849a14bd80e 100644
--- a/src/mongo/db/s/resharding/resharding_future_util.cpp
+++ b/src/mongo/db/s/resharding/resharding_future_util.cpp
@@ -51,42 +51,19 @@ ExecutorFuture<void> whenAllSucceedOn(const std::vector<SharedSemiFuture<void>>&
: ExecutorFuture(executor);
}
-std::vector<Future<void>> runAllInlineUnsafe(const std::vector<SharedSemiFuture<void>>& futures) {
- std::vector<Future<void>> result;
- result.reserve(futures.size());
-
- for (const auto& future : futures) {
- result.emplace_back(future.unsafeToInlineFuture());
- }
-
- return result;
-}
-
ExecutorFuture<void> cancelWhenAnyErrorThenQuiesce(
const std::vector<SharedSemiFuture<void>>& futures,
ExecutorPtr executor,
CancellationSource cancelSource) {
- if (futures.empty()) {
- return ExecutorFuture(executor);
- }
- // Run all futures inline so that the onError callback is called even if that error was caused
- // by the executor shutting down. This causes the logic for whenAllSucceed, whenAll, and the
- // onError callback to potentially run on the threads of the setters of the promises
- // associated with the input futures. Since this logic is thread safe, not blocking, and does
- // not acquire additional resources, this is safe, but beware if making further changes to this
- // function.
- return whenAllSucceed(runAllInlineUnsafe(futures))
- .unsafeToInlineFuture()
- .onError([futures, cancelSource](Status originalError) mutable {
+ return whenAllSucceedOn(futures, executor)
+ .onError([futures, executor, cancelSource](Status originalError) mutable {
cancelSource.cancel();
- return whenAll(runAllInlineUnsafe(futures))
+ return whenAll(thenRunAllOn(futures, executor))
.ignoreValue()
- .unsafeToInlineFuture()
+ .thenRunOn(executor)
.onCompletion([originalError](auto) { return originalError; });
- })
- .thenRunOn(executor);
+ });
}
-
} // namespace mongo::resharding