summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMisha Tyulenev <misha@mongodb.com>2017-10-10 14:33:52 -0400
committerMisha Tyulenev <misha@mongodb.com>2017-10-10 18:02:42 -0400
commit662632bf21694d9bf9edf53247eb9803a2b4a2c2 (patch)
tree3274b99d9641704b88faf9b66f68cb31256c12c4
parent953df5a1f04dafa56d1c1fb37f66438ba0698d4e (diff)
downloadmongo-662632bf21694d9bf9edf53247eb9803a2b4a2c2.tar.gz
SERVER-29792 upgrade / downgrade replica set tests for causal consistncy
-rw-r--r--jstests/multiVersion/causal_consistency_downgrade_rs.js69
-rw-r--r--jstests/multiVersion/causal_consistency_upgrade_rs.js76
2 files changed, 145 insertions, 0 deletions
diff --git a/jstests/multiVersion/causal_consistency_downgrade_rs.js b/jstests/multiVersion/causal_consistency_downgrade_rs.js
new file mode 100644
index 00000000000..29aa2d5d226
--- /dev/null
+++ b/jstests/multiVersion/causal_consistency_downgrade_rs.js
@@ -0,0 +1,69 @@
+/**
+ * Test the downgrade of a standalone replica set from latest to last-stable version succeeds,
+ * verifying behavior related to causal consistency at each stage.
+ */
+(function() {
+ "use strict";
+
+ load("jstests/multiVersion/libs/multi_rs.js");
+ load("jstests/multiVersion/libs/causal_consistency_helpers.js");
+
+ var newVersion = "latest";
+ var oldVersion = "last-stable";
+
+ var name = "causal_consistency_rs_downgrade";
+ var rst = new ReplSetTest(
+ {name: name, nodes: 3, waitForKeys: true, nodeOptions: {binVersion: newVersion}});
+ rst.startSet();
+ var replSetConfig = rst.getReplSetConfig();
+ // Hard-code catchup timeout to be compatible with 3.4
+ replSetConfig.settings = {catchUpTimeoutMillis: 2000};
+ rst.initiate(replSetConfig);
+
+ var primary = rst.getPrimary();
+ primary.getDB("test").runCommand({insert: "foo", documents: [{_id: 1, x: 1}]});
+ rst.awaitReplication();
+
+ // Nodes can accept afterClusterTime reads.
+ assert.soonNoExcept(() => {
+ assertContainsLogicalAndOperationTime(primary.getDB("test").runCommand({isMaster: 1}),
+ {initialized: true, signed: false});
+ return true;
+ });
+
+ rst.getSecondaries().forEach(function(secondary) {
+ assert.soonNoExcept(() => {
+ assertContainsLogicalAndOperationTime(secondary.getDB("test").runCommand({isMaster: 1}),
+ {initialized: true, signed: false});
+ return true;
+ });
+ });
+
+ jsTest.log("Setting FCV to 3.4 ...");
+ assert.commandWorked(primary.adminCommand({setFeatureCompatibilityVersion: "3.4"}));
+ rst.awaitReplication();
+
+ assertDoesNotContainLogicalOrOperationTime(
+ rst.getPrimary().getDB("test").runCommand({isMaster: 1}));
+
+ rst.getSecondaries().forEach(function(secondary) {
+ assertDoesNotContainLogicalOrOperationTime(
+ secondary.getDB("test").runCommand({isMaster: 1}));
+ });
+
+ jsTest.log("Downgrading secondaries ...");
+ rst.upgradeSecondaries(primary, {binVersion: oldVersion});
+ jsTest.log("Downgrading secondaries complete.");
+
+ rst.getSecondaries().forEach(function(secondary) {
+ assertDoesNotContainLogicalOrOperationTime(
+ secondary.getDB("test").runCommand({isMaster: 1}));
+ });
+
+ jsTest.log("Downgrading primary ...");
+ rst.upgradePrimary(primary, {binVersion: oldVersion});
+ jsTest.log("Downgrading primary complete.");
+
+ assertDoesNotContainLogicalOrOperationTime(
+ rst.getPrimary().getDB("test").runCommand({isMaster: 1}));
+})();
diff --git a/jstests/multiVersion/causal_consistency_upgrade_rs.js b/jstests/multiVersion/causal_consistency_upgrade_rs.js
new file mode 100644
index 00000000000..e3537e24bad
--- /dev/null
+++ b/jstests/multiVersion/causal_consistency_upgrade_rs.js
@@ -0,0 +1,76 @@
+/**
+ * Test the upgrade of a standalone replica set from the last-stable to the version succeeds,
+ * verifying behavior related to causal consistency at each stage.
+ */
+(function() {
+ "use strict";
+
+ load("jstests/multiVersion/libs/multi_rs.js");
+ load("jstests/multiVersion/libs/causal_consistency_helpers.js");
+
+ var newVersion = "latest";
+ var oldVersion = "last-stable";
+
+ var name = "causal_consistency_rs_upgrade";
+ var rst = new ReplSetTest(
+ {name: name, nodes: 3, nodeOptions: {binVersion: oldVersion}, waitForKeys: false});
+ rst.startSet();
+ var replSetConfig = rst.getReplSetConfig();
+ rst.initiate(replSetConfig);
+
+ var primary = rst.getPrimary();
+ primary.getDB("test").runCommand({insert: "foo", documents: [{_id: 1, x: 1}]});
+ rst.awaitReplication();
+
+ assertDoesNotContainLogicalOrOperationTime(primary.getDB("test").runCommand({isMaster: 1}));
+
+ rst.getSecondaries().forEach(function(secondary) {
+ assertDoesNotContainLogicalOrOperationTime(
+ secondary.getDB("test").runCommand({isMaster: 1}));
+ });
+
+ jsTest.log("Upgrading secondaries ...");
+ rst.upgradeSecondaries(primary, {binVersion: newVersion});
+ jsTest.log("Upgrading secondaries complete.");
+
+ rst.getSecondaries().forEach(function(secondary) {
+ assertDoesNotContainLogicalOrOperationTime(
+ secondary.getDB("test").runCommand({isMaster: 1}));
+ });
+
+ jsTest.log("Upgrading primary ...");
+ rst.upgradePrimary(primary, {binVersion: newVersion});
+ jsTest.log("Upgrading primary complete.");
+
+ assertDoesNotContainLogicalOrOperationTime(
+ rst.getPrimary().getDB("test").runCommand({isMaster: 1}));
+
+ rst.getSecondaries().forEach(function(secondary) {
+ assertDoesNotContainLogicalOrOperationTime(
+ secondary.getDB("test").runCommand({isMaster: 1}));
+ });
+
+ jsTest.log("Setting FCV to 3.6 ...");
+
+ assert.commandWorked(rst.getPrimary().adminCommand({setFeatureCompatibilityVersion: "3.6"}));
+ rst.awaitReplication();
+
+ rst.getPrimary().getDB("test").runCommand({insert: "foo", documents: [{_id: 2, x: 1}]});
+ rst.awaitReplication();
+
+ assert.soonNoExcept(() => {
+ assertContainsLogicalAndOperationTime(
+ rst.getPrimary().getDB("test").runCommand({isMaster: 1}),
+ {initialized: true, signed: false});
+ return true;
+ });
+
+ rst.getSecondaries().forEach(function(secondary) {
+ assert.soonNoExcept(() => {
+ assertContainsLogicalAndOperationTime(secondary.getDB("test").runCommand({isMaster: 1}),
+ {initialized: true, signed: false});
+ return true;
+ });
+ });
+
+})();