2013-07-22 16:33:35 -04:00
|
|
|
// Test that replSetStepDown filters out non-electable nodes
|
|
|
|
|
var replTest = new ReplSetTest({ name: 'testSet', nodes: 2 });
|
|
|
|
|
var nodes = replTest.startSet();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// setup config
|
|
|
|
|
var c = replTest.getReplSetConfig();
|
|
|
|
|
c.members[1].priority = 0; // not electable
|
|
|
|
|
replTest.initiate(c);
|
|
|
|
|
|
2015-11-25 11:20:43 -05:00
|
|
|
var master = replTest.getPrimary();
|
2013-07-22 16:33:35 -04:00
|
|
|
var testDB = master.getDB('test');
|
|
|
|
|
var firstPrimary = testDB.isMaster().primary
|
|
|
|
|
|
|
|
|
|
// do a write to allow stepping down of the primary;
|
|
|
|
|
// otherwise, the primary will refuse to step down
|
|
|
|
|
testDB.foo.insert({x:1});
|
|
|
|
|
replTest.awaitReplication();
|
|
|
|
|
|
|
|
|
|
// stepdown should fail since there is no-one to elect within 10 secs
|
|
|
|
|
testDB.adminCommand({replSetStepDown:5});
|
2014-04-04 08:53:38 -04:00
|
|
|
assert(master.getDB("a").isMaster().ismaster, "not master")
|
2013-07-22 16:33:35 -04:00
|
|
|
|
|
|
|
|
// step down the primary asyncronously so it doesn't kill this test
|
2014-04-04 08:53:38 -04:00
|
|
|
var wait = startParallelShell("db.adminCommand({replSetStepDown:1000, force:true})", master.port);
|
2015-06-23 22:22:52 -04:00
|
|
|
var exitCode = wait({checkExitSuccess: false});
|
|
|
|
|
assert.neq(0, exitCode, "expected replSetStepDown to close the shell's connection");
|
2013-07-22 16:33:35 -04:00
|
|
|
|
|
|
|
|
// check that the old primary is no longer master
|
2013-07-23 17:32:02 -04:00
|
|
|
assert.soon( function() {
|
2014-04-04 08:53:38 -04:00
|
|
|
try {
|
|
|
|
|
var isMaster = master.getDB("a").isMaster();
|
|
|
|
|
printjson(isMaster);
|
|
|
|
|
return !(isMaster.ismaster);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2013-07-23 17:32:02 -04:00
|
|
|
}, "they shouldn't be master, but are")
|
2014-04-04 08:53:38 -04:00
|
|
|
|
2013-07-22 16:33:35 -04:00
|
|
|
// stop
|
|
|
|
|
replTest.stopSet();
|