diff options
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 |
