Files
mongo/jstests/replsets/stepdown.js

80 lines
1.8 KiB
JavaScript

var replTest = new ReplSetTest({ name: 'testSet', nodes: 2 });
var nodes = replTest.startSet();
replTest.initiate();
var master = replTest.getMaster();
// do a write
master.getDB("foo").bar.insert({x:1});
replTest.awaitReplication();
// lock secondary
var locked = replTest.liveNodes.slaves[0];
locked.getDB("admin").runCommand({fsync : 1, lock : 1});
print("waiting 11 seconds");
for (var i = 0; i < 11; i++) {
// do another write
master.getDB("foo").bar.insert({x:i});
sleep(1000);
}
// this should fail, so we don't need to try/catch
var result = master.getDB("admin").runCommand({replSetStepDown: 10});
printjson(result);
assert.eq(result.ok, 0);
try {
master.getDB("admin").runCommand({replSetStepDown: 50, force : true});
}
catch (e) {
print(e);
}
var r2 = master.getDB("admin").runCommand({ismaster : 1});
assert.eq(r2.ismaster, false);
assert.eq(r2.secondary, true);
print("unlock");
printjson(locked.getDB("admin").$cmd.sys.unlock.findOne());
print("reset stepped down time");
master.getDB("admin").runCommand({replSetFreeze:0});
master = replTest.getMaster();
print("make config with priorities");
var config = master.getDB("local").system.replset.findOne();
config.version++;
config.members[0].priority = 2;
config.members[1].priority = 1;
try {
master.getDB("admin").runCommand({replSetReconfig : config});
}
catch (e) {
print(e);
}
replTest.awaitReplication();
master = replTest.getMaster();
var firstMaster = master;
print("master is now "+firstMaster);
try {
printjson(master.getDB("admin").runCommand({replSetStepDown : 100, force : true}));
}
catch (e) {
print(e);
}
print("get a master");
replTest.getMaster();
assert.soon(function() {
var secondMaster = replTest.getMaster();
return firstMaster+"" != secondMaster+"";
}, 'making sure '+firstMaster+' isn\'t still master', 60000);
replTest.stopSet();