summaryrefslogtreecommitdiff
path: root/jstests/replsets/rollback_via_refetch_commit_transaction.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/replsets/rollback_via_refetch_commit_transaction.js')
-rw-r--r--jstests/replsets/rollback_via_refetch_commit_transaction.js110
1 files changed, 56 insertions, 54 deletions
diff --git a/jstests/replsets/rollback_via_refetch_commit_transaction.js b/jstests/replsets/rollback_via_refetch_commit_transaction.js
index 380bcdb4fd2..317fc7b97f8 100644
--- a/jstests/replsets/rollback_via_refetch_commit_transaction.js
+++ b/jstests/replsets/rollback_via_refetch_commit_transaction.js
@@ -10,71 +10,73 @@
TestData.skipCheckDBHashes = true;
(function() {
- "use strict";
- load("jstests/core/txns/libs/prepare_helpers.js");
- load("jstests/replsets/libs/rollback_test.js");
+"use strict";
+load("jstests/core/txns/libs/prepare_helpers.js");
+load("jstests/replsets/libs/rollback_test.js");
- const dbName = "test";
- const collName = "rollback_via_refetch_commit_transaction";
+const dbName = "test";
+const collName = "rollback_via_refetch_commit_transaction";
- // Provide RollbackTest with custom ReplSetTest so we can set forceRollbackViaRefetch.
- const rst = new ReplSetTest({
- name: collName,
- nodes: 3,
- useBridge: true,
- nodeOptions: {setParameter: "forceRollbackViaRefetch=true"}
- });
+// Provide RollbackTest with custom ReplSetTest so we can set forceRollbackViaRefetch.
+const rst = new ReplSetTest({
+ name: collName,
+ nodes: 3,
+ useBridge: true,
+ nodeOptions: {setParameter: "forceRollbackViaRefetch=true"}
+});
- rst.startSet();
- const config = rst.getReplSetConfig();
- config.members[2].priority = 0;
- config.settings = {chainingAllowed: false};
- rst.initiate(config);
+rst.startSet();
+const config = rst.getReplSetConfig();
+config.members[2].priority = 0;
+config.settings = {
+ chainingAllowed: false
+};
+rst.initiate(config);
- const primaryNode = rst.getPrimary();
+const primaryNode = rst.getPrimary();
- // Create collection that exists on the sync source and rollback node.
- assert.commandWorked(
- primaryNode.getDB(dbName).runCommand({create: collName, writeConcern: {w: 2}}));
+// Create collection that exists on the sync source and rollback node.
+assert.commandWorked(
+ primaryNode.getDB(dbName).runCommand({create: collName, writeConcern: {w: 2}}));
- // Issue a 'prepareTransaction' command just to the current primary.
- 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 prepareTimestamp = PrepareHelpers.prepareTransaction(session);
+// Issue a 'prepareTransaction' command just to the current primary.
+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 prepareTimestamp = PrepareHelpers.prepareTransaction(session);
- const rollbackTest = new RollbackTest(collName, rst);
- // Stop replication from the current primary ("rollbackNode").
- const rollbackNode = rollbackTest.transitionToRollbackOperations();
+const rollbackTest = new RollbackTest(collName, rst);
+// Stop replication from the current primary ("rollbackNode").
+const rollbackNode = rollbackTest.transitionToRollbackOperations();
- PrepareHelpers.commitTransaction(session, prepareTimestamp);
+PrepareHelpers.commitTransaction(session, prepareTimestamp);
- // Step down current primary and elect a node that lacks the commit.
- rollbackTest.transitionToSyncSourceOperationsBeforeRollback();
+// Step down current primary and elect a node that lacks the commit.
+rollbackTest.transitionToSyncSourceOperationsBeforeRollback();
- // Verify the old primary crashes trying to roll back.
- clearRawMongoProgramOutput();
- rollbackTest.transitionToSyncSourceOperationsDuringRollback();
- jsTestLog("Waiting for crash");
- assert.soon(function() {
- try {
- rollbackNode.getDB("local").runCommand({ping: 1});
- } catch (e) {
- return true;
- }
- return false;
- }, "Node did not fassert", ReplSetTest.kDefaultTimeoutMS);
+// Verify the old primary crashes trying to roll back.
+clearRawMongoProgramOutput();
+rollbackTest.transitionToSyncSourceOperationsDuringRollback();
+jsTestLog("Waiting for crash");
+assert.soon(function() {
+ try {
+ rollbackNode.getDB("local").runCommand({ping: 1});
+ } catch (e) {
+ return true;
+ }
+ return false;
+}, "Node did not fassert", ReplSetTest.kDefaultTimeoutMS);
- // Let the ReplSetTest know the old primary is down.
- rst.stop(rst.getNodeId(rollbackNode), undefined, {allowedExitCode: MongoRunner.EXIT_ABRUPT});
+// Let the ReplSetTest know the old primary is down.
+rst.stop(rst.getNodeId(rollbackNode), undefined, {allowedExitCode: MongoRunner.EXIT_ABRUPT});
- const msg = RegExp("Can't roll back this command yet: ");
- assert.soon(function() {
- return rawMongoProgramOutput().match(msg);
- }, "Node did not fail to roll back entry.");
+const msg = RegExp("Can't roll back this command yet: ");
+assert.soon(function() {
+ return rawMongoProgramOutput().match(msg);
+}, "Node did not fail to roll back entry.");
- // Transaction is still in prepared state and validation will be blocked, so skip it.
- rst.stopSet(undefined, undefined, {skipValidation: true});
+// Transaction is still in prepared state and validation will be blocked, so skip it.
+rst.stopSet(undefined, undefined, {skipValidation: true});
}());