diff options
author | Cheahuychou Mao <mao.cheahuychou@gmail.com> | 2021-10-29 20:47:34 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-10-29 21:29:29 +0000 |
commit | 486ea6c419d62e9e47b3378baedfcedfdf77e48d (patch) | |
tree | 603ca02d8bb63e8e52c09df9c941a68cd68a1763 | |
parent | 786482da93c3e5e58b1c690cb060f00c60864f69 (diff) | |
download | mongo-486ea6c419d62e9e47b3378baedfcedfdf77e48d.tar.gz |
SERVER-61118 TransactionCoordinator unit tests that create a second coordinator for a txnNumber should wait for the decision future of the previous coordinator
-rw-r--r-- | src/mongo/db/s/transaction_coordinator_catalog_test.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/s/transaction_coordinator_service_test.cpp | 19 |
2 files changed, 16 insertions, 5 deletions
diff --git a/src/mongo/db/s/transaction_coordinator_catalog_test.cpp b/src/mongo/db/s/transaction_coordinator_catalog_test.cpp index a8448293278..ceb5f4c155c 100644 --- a/src/mongo/db/s/transaction_coordinator_catalog_test.cpp +++ b/src/mongo/db/s/transaction_coordinator_catalog_test.cpp @@ -211,6 +211,8 @@ TEST_F(TransactionCoordinatorCatalogTest, _coordinatorCatalog->get(operationContext(), lsid, txnNumberAndRetryCounter1); coordinator1InCatalog->runCommit(operationContext(), kOneShardIdList); assertCommandSentAndRespondWith("prepareTransaction", kNoSuchTransaction, boost::none); + coordinator1InCatalog->getDecision().wait(); + createCoordinatorInCatalog(operationContext(), lsid, txnNumberAndRetryCounter2); auto latestTxnNumberRetryCounterAndCoordinator = diff --git a/src/mongo/db/s/transaction_coordinator_service_test.cpp b/src/mongo/db/s/transaction_coordinator_service_test.cpp index c99cc39ec25..e1504a3cbe1 100644 --- a/src/mongo/db/s/transaction_coordinator_service_test.cpp +++ b/src/mongo/db/s/transaction_coordinator_service_test.cpp @@ -377,9 +377,16 @@ TEST_F(TransactionCoordinatorServiceTest, coordinatorService->createCoordinator( operationContext(), _lsid, _txnNumberAndRetryCounter, kCommitDeadline); - auto completionFuture = coordinatorService->coordinateCommit( - operationContext(), _lsid, _txnNumberAndRetryCounter, kOneShardIdSet); - assertCommandSentAndRespondWith("prepareTransaction", kPrepareOk, boost::none); + { + // Set this server parameter so coordinateCommit returns the decision future instead of the + // completion future. + RAIIServerParameterControllerForTest _controller{ + "coordinateCommitReturnImmediatelyAfterPersistingDecision", true}; + auto decisionFuture = *coordinatorService->coordinateCommit( + operationContext(), _lsid, _txnNumberAndRetryCounter, kOneShardIdSet); + assertCommandSentAndRespondWith("prepareTransaction", kPrepareOk, boost::none); + decisionFuture.get(); + } TxnNumberAndRetryCounter otherTxnNumberAndRetryCounter{ _txnNumberAndRetryCounter.getTxnNumber(), @@ -390,6 +397,8 @@ TEST_F(TransactionCoordinatorServiceTest, AssertionException, 6032301); + auto completionFuture = + *coordinatorService->recoverCommit(operationContext(), _lsid, _txnNumberAndRetryCounter); assertCommandSentAndRespondWith("commitTransaction", kOk, boost::none); completionFuture.get(); } @@ -642,7 +651,7 @@ TEST_F(TransactionCoordinatorServiceTest, coordinatorService->createCoordinator( operationContext(), _lsid, _txnNumberAndRetryCounter, kCommitDeadline); - auto completionFuture = coordinatorService->coordinateCommit( + auto completionFuture = *coordinatorService->coordinateCommit( operationContext(), _lsid, _txnNumberAndRetryCounter, kOneShardIdSet); TxnNumberAndRetryCounter newTxnNumberAndRetryCounter{ @@ -655,7 +664,7 @@ TEST_F(TransactionCoordinatorServiceTest, assertCommandSentAndRespondWith("prepareTransaction", kNoSuchTransaction, boost::none); assertCommandSentAndRespondWith("abortTransaction", kOk, boost::none); - completionFuture.get(); + ASSERT_THROWS_CODE(completionFuture.get(), AssertionException, ErrorCodes::NoSuchTransaction); } TEST_F(TransactionCoordinatorServiceTest, CoordinatorRetriesOnWriteConcernErrorToPrepare) { |