summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Schultz <william.schultz@mongodb.com>2019-09-25 16:00:07 +0000
committerevergreen <evergreen@mongodb.com>2019-09-25 16:00:07 +0000
commit70dbd760d103d4717475e4e2bbb40c67dc3e4044 (patch)
tree6b20bde1cd202d75ddb38ab7102faf4b275bffc3
parentfdadc988b37450c3e7834fda792d5fdd5467e3f4 (diff)
downloadmongo-70dbd760d103d4717475e4e2bbb40c67dc3e4044.tar.gz
SERVER-41221 rollback_after_enabling_majority_reads.js test should make sure the final rollback occurs on node 0
(cherry picked from commit c926176630da106f30b84f69cba036c2e4963758)
-rw-r--r--jstests/replsets/rollback_after_enabling_majority_reads.js19
1 files changed, 18 insertions, 1 deletions
diff --git a/jstests/replsets/rollback_after_enabling_majority_reads.js b/jstests/replsets/rollback_after_enabling_majority_reads.js
index b477e3dc6c6..8a02efd22a0 100644
--- a/jstests/replsets/rollback_after_enabling_majority_reads.js
+++ b/jstests/replsets/rollback_after_enabling_majority_reads.js
@@ -11,6 +11,7 @@
"use strict";
load("jstests/replsets/libs/rollback_test.js");
+load("jstests/libs/write_concern_util.js");
TestData.rollbackShutdowns = true;
const name = "rollback_after_enabling_majority_reads";
@@ -27,7 +28,7 @@ config.settings = {
chainingAllowed: false
};
replTest.initiate(config);
-const rollbackTest = new RollbackTest(name, replTest);
+let rollbackTest = new RollbackTest(name, replTest);
jsTest.log("Ensure the stable timestamp is ahead of the common point on the rollback node.");
const rollbackNode = rollbackTest.transitionToRollbackOperations();
@@ -72,6 +73,22 @@ assert.eq(1, rollbackNode.getDB(dbName)[collName].find({_id: "steady state op"})
jsTest.log("Restart the rollback node with enableMajorityReadConcern=true.");
rollbackTest.restartNode(0, 15, {enableMajorityReadConcern: "true"});
+// Make sure node 0 is the primary.
+let node = replTest.nodes[0];
+jsTestLog("Waiting for node " + node.host + " to become primary.");
+replTest.awaitNodesAgreeOnPrimary();
+assert.commandWorked(node.adminCommand({replSetStepUp: 1}));
+replTest.waitForState(node, ReplSetTest.State.PRIMARY);
+assert.eq(replTest.getPrimary(), node, node.host + " was not primary after step up.");
+
+// Restart replication on the tiebreaker node before constructing a new RollbackTest.
+restartServerReplication(replTest.nodes[2]);
+
+// Create a new RollbackTest fixture to execute the final rollback. This will guarantee that the
+// final rollback occurs on the current primary, which should be node 0.
+jsTestLog("Creating a new RollbackTest fixture to execute a final rollback.");
+rollbackTest = new RollbackTest(name, replTest);
+
jsTest.log("Rollback should succeed since the common point is at least the stable timestamp.");
rollbackTest.transitionToRollbackOperations();
rollbackTest.transitionToSyncSourceOperationsBeforeRollback();