void ClusterCommandTestFixture::runTxnCommandMaxErrors(BSONObj cmd, ErrorCodes::Error code, bool isTargeted) { auto future = launchAsync([&] { runCommand(cmd); }); size_t numTargetedShards = isTargeted ? 1 : numShards; for (size_t i = 0; i < kMaxNumStaleVersionRetries - 1; i++) { for (size_t j = 0; j < numTargetedShards; j++) { expectReturnsError(code); } // In a transaction, when the router encounters a retryable error it sends abortTransaction // to each pending participant shard before retrying. for (size_t j = 0; j < numTargetedShards; j++) { expectAbortTransaction(); } } // The router should exhaust its retries here. for (size_t j = 0; j < numTargetedShards; j++) { expectReturnsError(code); } // In a transaction, each targeted shard is sent abortTransaction when the router exhausts its // retries. for (size_t i = 0; i < numTargetedShards; i++) { expectAbortTransaction(); } future.timed_get(kFutureTimeout); }
void ClusterCommandTestFixture::runTxnCommandOneError(BSONObj cmd, ErrorCodes::Error code, bool isTargeted) { auto future = launchAsync([&] { // Shouldn't throw. runCommand(cmd); }); size_t numMocks = isTargeted ? 1 : numShards; for (size_t i = 0; i < numMocks; i++) { expectReturnsError(code); } // In a transaction, when the router encounters a retryable error it sends abortTransaction to // each pending participant shard before retrying. for (size_t i = 0; i < numMocks; i++) { expectAbortTransaction(); } for (size_t i = 0; i < numMocks; i++) { expectReturnsSuccess(i % numShards); } future.timed_get(kFutureTimeout); }
void ClusterCommandTestFixture::runCommandInspectRequests(BSONObj cmd, InspectionCallback cb, bool isTargeted) { auto future = launchAsync([&] { runCommand(cmd); }); size_t numMocks = isTargeted ? 1 : numShards; for (size_t i = 0; i < numMocks; i++) { expectInspectRequest(i % numShards, cb); } future.timed_get(kFutureTimeout); }
void ClusterCommandTestFixture::runCommandSuccessful(BSONObj cmd, bool isTargeted) { auto future = launchAsync([&] { // Shouldn't throw. runCommand(cmd); }); size_t numMocks = isTargeted ? 1 : numShards; for (size_t i = 0; i < numMocks; i++) { expectReturnsSuccess(i % numShards); } future.timed_get(kFutureTimeout); }
int DialogWindow::LaunchOptions::runModal() { return launchAsync()->runModalLoop(); }