diff options
-rw-r--r-- | jstests/multiVersion/libs/multi_rs.js | 14 | ||||
-rw-r--r-- | jstests/multiVersion/zero_vote_arbiter_multiversion.js | 84 | ||||
-rw-r--r-- | jstests/multiVersion/zero_vote_arbiter_upgrade_downgrade.js | 46 | ||||
-rw-r--r-- | jstests/replsets/zero_vote_arbiter.js | 114 |
4 files changed, 0 insertions, 258 deletions
diff --git a/jstests/multiVersion/libs/multi_rs.js b/jstests/multiVersion/libs/multi_rs.js index 1113d8a73a9..73f4ff07531 100644 --- a/jstests/multiVersion/libs/multi_rs.js +++ b/jstests/multiVersion/libs/multi_rs.js @@ -106,17 +106,3 @@ ReplSetTest.prototype.reconnect = function( node ){ return this.nodes[ nodeId ] } - -ReplSetTest.prototype.conf = function () { - var admin = this.getPrimary().getDB('admin'); - - var resp = admin.runCommand({replSetGetConfig:1}); - - if (resp.ok && !(resp.errmsg) && resp.config) - return resp.config; - - else if (resp.errmsg && resp.errmsg.startsWith( "no such cmd" )) - return admin.getSisterDB("local").system.replset.findOne(); - - throw new Error("Could not retrieve replica set config: " + tojson(resp)); -} diff --git a/jstests/multiVersion/zero_vote_arbiter_multiversion.js b/jstests/multiVersion/zero_vote_arbiter_multiversion.js deleted file mode 100644 index 1a21e73d83b..00000000000 --- a/jstests/multiVersion/zero_vote_arbiter_multiversion.js +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Test that replSetInitiate and replSetReconfig prohibit zero-vote arbiters, - * SERVER-13627. - */ - -load('./jstests/multiVersion/libs/multi_rs.js'); - -var oldVersion = '2.6'; -var newVersion = 'latest'; -var NewReplicaSetConfigurationIncompatible = 103; -var InvalidReplicaSetConfig = 93; - -/* - * Start 3 nodes running 'rsVersion', try to add a 0-vote arbiter at - * 'arbiterVersion' and return the replSetReconfig response. - */ -function addZeroVoteArbiter(rsVersion, arbiterVersion) { - var nodes = { - n1: {binVersion: rsVersion}, - n2: {binVersion: rsVersion}, - n3: {binVersion: rsVersion}}; - - var replTest = new ReplSetTest({nodes: nodes}); - var conns = replTest.startSet(); - replTest.initiate(); - - var arbiterConn = replTest.add({binVersion: arbiterVersion}); - var admin = conns[0].getDB('admin'); - var conf = replTest.conf(); - jsTestLog('current config:'); - printjson(conf); - conf.members.push({ - _id: 3, - host: arbiterConn.host, - arbiterOnly: true, - votes: 0 - }); - conf.version++; - - jsTestLog('Add arbiter with zero votes:'); - var response = admin.runCommand({replSetReconfig: conf}); - - if (response.ok) { - // Old-version primary doesn't prohibit the reconfig, but the - // new-version arbiter removes itself when it sees it has 0 votes. - assert.soon(function () { - try { - var status = replTest.status(); - printjson(status); - return (status.members.length == 4 - && status.members[3].state == replTest.DOWN - && (/configuration is invalid/i).test(status.members[3].lastHeartbeatMessage)); - } catch (exc) { - // Not ready. - print(exc); - return false; - } - }); - - // Primary stays up. - replTest.getPrimary(); - } - - replTest.stopSet(); - return response; -} - -(function newRSPlusOldArbiter() { - jsTestLog('New-version RS with 3 nodes, adding 0-vote arbiter is prohibited.'); - - var response = addZeroVoteArbiter(newVersion, oldVersion); - assert.commandFailed(response); - assert.eq(response.code, NewReplicaSetConfigurationIncompatible); - assert(/.*arbiter must vote.*/i.test(response.errmsg)); -})(); - -(function oldRSPlusNewArbiter() { - jsTestLog('Old-version RS with 3 nodes, adding 0-vote arbiter is allowed.'); - - var response = addZeroVoteArbiter(oldVersion, newVersion); - - /* Old version doesn't prohibit the reconfig. */ - assert.commandWorked(response); -})(); diff --git a/jstests/multiVersion/zero_vote_arbiter_upgrade_downgrade.js b/jstests/multiVersion/zero_vote_arbiter_upgrade_downgrade.js deleted file mode 100644 index 14e03de3bba..00000000000 --- a/jstests/multiVersion/zero_vote_arbiter_upgrade_downgrade.js +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Test zero-vote arbiters during upgrade and downgrade between 2.6 and 2.8. - * SERVER-13627. - */ - -load('./jstests/multiVersion/libs/multi_rs.js'); - -var oldVersion = '2.6'; -var newVersion = 'latest'; - -/* - * Create a 2.6 replica set with a 0-vote arbiter and upgrade it to the latest - * version. Check that we still have a quorum and can elect a primary. Downgrade - * it, check again. - */ -(function upgradeAndDowngradeRSWithAZeroVoteArbiter() { - var nodes = { - n1: {binVersion: oldVersion}, - n2: {binVersion: oldVersion}, - a3: {binVersion: oldVersion}}; - - var replTest = new ReplSetTest({nodes: nodes}); - replTest.startSet(); - var conf = replTest.getReplSetConfig(); - conf.members[2].votes = 0; - replTest.initiate(conf); - - jsTestLog('Upgrade to ' + newVersion); - replTest.upgradeSet(newVersion); - - // Should be able to elect a primary. - replTest.getPrimary(); - - jsTestLog('Config after upgrade:'); - printjson(replTest.conf()); - - jsTestLog('Downgrade to ' + oldVersion); - replTest.upgradeSet(oldVersion); - - // Should be able to elect a primary. - replTest.getPrimary(); - jsTestLog('Config after downgrade:'); - printjson(replTest.conf()); - - replTest.stopSet(); -})(); diff --git a/jstests/replsets/zero_vote_arbiter.js b/jstests/replsets/zero_vote_arbiter.js deleted file mode 100644 index d7dbe23e0dc..00000000000 --- a/jstests/replsets/zero_vote_arbiter.js +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Test that replSetInitiate and replSetReconfig prohibit zero-vote arbiters, - * SERVER-13627. - */ - -var NewReplicaSetConfigurationIncompatible = 103; -var InvalidReplicaSetConfig = 93; - -/* - * Create replica set with 3 nodes, add new node as 0-vote arbiter. - */ -(function addArbiterZeroVotes() { - var replTest = new ReplSetTest({nodes: 3}); - var conns = replTest.startSet(); - replTest.initiate(); - - var arbiterConn = replTest.add(); - var admin = conns[0].getDB("admin"); - var conf = admin.runCommand({replSetGetConfig: 1}).config; - conf.members.push({ - _id: 3, - host: arbiterConn.host, - arbiterOnly: true, - votes: 0 - }); - conf.version++; - - jsTestLog('Add arbiter with zero votes:'); - var response = admin.runCommand({replSetReconfig: conf}); - assert.commandFailed(response); - assert.eq(response.code, NewReplicaSetConfigurationIncompatible); - assert(/.*arbiter must vote.*/i.test(response.errmsg)); - - replTest.stopSet(); -})(); - -/* - * Replica set with 4 nodes, 2 are arbiters. Reconfigure one with 0 votes. - */ -(function reconfigArbiterZeroVotes() { - var replTest = new ReplSetTest({nodes: 4}); - var conns = replTest.startSet(); - var config = replTest.getReplSetConfig(); - config.members[2].arbiterOnly = true; - config.members[3].arbiterOnly = true; - replTest.initiate(config); - - var admin = conns[0].getDB("admin"); - var conf = admin.runCommand({replSetGetConfig: 1}).config; - - jsTestLog('Reconfig arbiter with zero votes:'); - conf.members[3].votes = 0; - conf.version++; - var response = admin.runCommand({replSetReconfig: conf}); - printjson(response); - assert.commandFailed(response); - assert.eq(response.code, NewReplicaSetConfigurationIncompatible); - assert(/.*arbiter must vote.*/i.test(response.errmsg)); - - replTest.stopSet(); -})(); - - -/* - * replSetInitiate with a 0-vote arbiter. - */ -(function initiateArbiterZeroVotes() { - var replTest = new ReplSetTest({nodes: 3}); - var conns = replTest.startSet(); - var config = replTest.getReplSetConfig(); - config.members[2].arbiterOnly = true; - config.members[2].votes = 0; - - var admin = conns[0].getDB("admin"); - - jsTestLog('replSetInitiate with 0-vote arbiter:'); - var response = admin.runCommand({replSetInitiate: config}); - printjson(response); - assert.commandFailed(response); - - // Test for SERVER-15838 wrong error from RS init with 0-vote arbiter. - assert.eq(response.code, InvalidReplicaSetConfig); - assert(/.*arbiter must vote.*/i.test(response.errmsg)); - - replTest.stopSet(); -})(); - -/* - * Replica set with max number of voting nodes. Add a 0-vote arbiter. - */ -(function maxVoteEdgeAddArbiterZeroVotes() { - var replTest = new ReplSetTest({nodes: 7}); - var conns = replTest.startSet(); - replTest.initiate(); - - var arbiterConn = replTest.add(); - var admin = conns[0].getDB("admin"); - var conf = admin.runCommand({replSetGetConfig: 1}).config; - conf.members.push({ - _id: 7, - host: arbiterConn.host, - arbiterOnly: true, - votes: 0 - }); - conf.version++; - - jsTestLog('Add arbiter with zero votes:'); - var response = admin.runCommand({replSetReconfig: conf}); - assert.commandFailed(response); - assert.eq(response.code, NewReplicaSetConfigurationIncompatible); - assert(/.*arbiter must vote.*/i.test(response.errmsg)); - - replTest.stopSet(); -})(); |