diff options
author | Misha Tyulenev <misha@mongodb.com> | 2017-10-10 14:33:52 -0400 |
---|---|---|
committer | Misha Tyulenev <misha@mongodb.com> | 2017-10-10 18:02:42 -0400 |
commit | 662632bf21694d9bf9edf53247eb9803a2b4a2c2 (patch) | |
tree | 3274b99d9641704b88faf9b66f68cb31256c12c4 | |
parent | 953df5a1f04dafa56d1c1fb37f66438ba0698d4e (diff) | |
download | mongo-662632bf21694d9bf9edf53247eb9803a2b4a2c2.tar.gz |
SERVER-29792 upgrade / downgrade replica set tests for causal consistncy
-rw-r--r-- | jstests/multiVersion/causal_consistency_downgrade_rs.js | 69 | ||||
-rw-r--r-- | jstests/multiVersion/causal_consistency_upgrade_rs.js | 76 |
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; + }); + }); + +})(); |