[SERVER-71662] Prevent future util's whenAllSuceed from throwing ErrorCodes::BrokenPromise on executor shutdown Created: 28/Nov/22  Updated: 14/Mar/23

Status: Open
Project: Core Server
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Major - P3
Reporter: Blake Oler Assignee: Backlog - Service Architecture
Resolution: Unresolved Votes: 0
Labels: lowcontext
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Assigned Teams:
Service Arch
Operating System: ALL
Participants:

 Description   

Repro:

TEST_F(WhenAllSucceedTest, DoesNotReturnBrokenPromiseIfExecutorShutdownWhileWaiting) {
    // create a future waits on a barrier
 
    const auto kNumInputs = 5;
    auto [inputPromises, rawInputFutures] = makePromisesAndFutures<void>(kNumInputs);
 
    // Turn raw input Futures into ExecutorFutures.
    std::vector<ExecutorFuture<void>> inputFutures;
    for (auto i = 0; i < kNumInputs; ++i) {
        inputFutures.emplace_back(std::move(rawInputFutures[i]).thenRunOn(executor()));
    }
 
    auto result = whenAllSucceed(std::move(inputFutures));
 
    executor()->shutdown();
 
    for (auto i = 0; i < kNumInputs; ++i) {
        inputPromises[i].emplaceValue();
    }
 
    result.get();
}

Can be solved in the same manner as SERVER-54735.


Generated at Thu Feb 08 06:19:38 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.