summaryrefslogtreecommitdiff
path: root/jstests/replsets/rollback_via_refetch_commit_transaction.js
diff options
context:
space:
mode:
authorLingzhi Deng <lingzhi.deng@mongodb.com>2019-04-09 09:58:04 -0400
committerLingzhi Deng <lingzhi.deng@mongodb.com>2019-04-09 09:58:04 -0400
commit67e08418c8e9722768ead723bafda7e229660291 (patch)
tree541192d94951c97d14947fd5432f3a38cec4d4f9 /jstests/replsets/rollback_via_refetch_commit_transaction.js
parent3150154574757e70f1499e97456956b5376630c8 (diff)
downloadmongo-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.js26
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});
}());