diff options
author | Lingzhi Deng <lingzhi.deng@mongodb.com> | 2019-04-09 09:58:04 -0400 |
---|---|---|
committer | Lingzhi Deng <lingzhi.deng@mongodb.com> | 2019-04-09 09:58:04 -0400 |
commit | 67e08418c8e9722768ead723bafda7e229660291 (patch) | |
tree | 541192d94951c97d14947fd5432f3a38cec4d4f9 /jstests/replsets/rollback_via_refetch_commit_transaction.js | |
parent | 3150154574757e70f1499e97456956b5376630c8 (diff) | |
download | mongo-67e08418c8e9722768ead723bafda7e229660291.tar.gz |
SERVER-40269: commitTransaction should assert that the prepare oplog entry is majority committed
Diffstat (limited to 'jstests/replsets/rollback_via_refetch_commit_transaction.js')
-rw-r--r-- | jstests/replsets/rollback_via_refetch_commit_transaction.js | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/jstests/replsets/rollback_via_refetch_commit_transaction.js b/jstests/replsets/rollback_via_refetch_commit_transaction.js index bb4ca534553..380bcdb4fd2 100644 --- a/jstests/replsets/rollback_via_refetch_commit_transaction.js +++ b/jstests/replsets/rollback_via_refetch_commit_transaction.js @@ -31,26 +31,25 @@ TestData.skipCheckDBHashes = true; config.settings = {chainingAllowed: false}; rst.initiate(config); - const rollbackTest = new RollbackTest(collName, rst); + const primaryNode = rst.getPrimary(); // Create collection that exists on the sync source and rollback node. - assert.commandWorked(rollbackTest.getPrimary().getDB(dbName).runCommand( - {create: collName, writeConcern: {w: 2}})); - - // Stop replication from the current primary ("rollbackNode"). - const rollbackNode = rollbackTest.transitionToRollbackOperations(); + assert.commandWorked( + primaryNode.getDB(dbName).runCommand({create: collName, writeConcern: {w: 2}})); // Issue a 'prepareTransaction' command just to the current primary. - const session = rollbackNode.getDB(dbName).getMongo().startSession({causalConsistency: false}); + const session = primaryNode.getDB(dbName).getMongo().startSession({causalConsistency: false}); const sessionDB = session.getDatabase(dbName); const sessionColl = sessionDB.getCollection(collName); session.startTransaction(); assert.commandWorked(sessionColl.insert({"prepare": "entry"})); - const result = assert.commandWorked( - session.getDatabase('admin').adminCommand({prepareTransaction: 1, writeConcern: {w: 1}})); - assert(result.prepareTimestamp, - "prepareTransaction did not return a 'prepareTimestamp': " + tojson(result)); - PrepareHelpers.commitTransaction(session, result.prepareTimestamp); + const prepareTimestamp = PrepareHelpers.prepareTransaction(session); + + const rollbackTest = new RollbackTest(collName, rst); + // Stop replication from the current primary ("rollbackNode"). + const rollbackNode = rollbackTest.transitionToRollbackOperations(); + + PrepareHelpers.commitTransaction(session, prepareTimestamp); // Step down current primary and elect a node that lacks the commit. rollbackTest.transitionToSyncSourceOperationsBeforeRollback(); @@ -76,5 +75,6 @@ TestData.skipCheckDBHashes = true; return rawMongoProgramOutput().match(msg); }, "Node did not fail to roll back entry."); - rst.stopSet(); + // Transaction is still in prepared state and validation will be blocked, so skip it. + rst.stopSet(undefined, undefined, {skipValidation: true}); }()); |