diff options
| author | Lucas de Castro Borges <lucas@gnuabordo.com.br> | 2025-02-11 15:07:35 -0300 |
|---|---|---|
| committer | Lucas de Castro Borges <lucas@gnuabordo.com.br> | 2025-02-11 15:07:35 -0300 |
| commit | 4cb8841196d0625dfa3825aa326f071cd27c7b8b (patch) | |
| tree | 1682a647d4463397c119183369ae6f750d5fdcff /src/mongo/db/s/resharding/resharding_future_util.cpp | |
| parent | aa03c6362cbaa767638e6eed9b031d86dd2643d1 (diff) | |
| parent | 8f0827553e09872941945a093b647a4211a9db7f (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.cpp | 33 |
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 |
