This is just a cleanup work to hide some of the private state of ReplSetTest so it is easier to encapsulate and add new logic. Also enables strict mode.
81 lines
2.1 KiB
JavaScript
81 lines
2.1 KiB
JavaScript
|
|
function myprint( x ) {
|
|
print( "chaining output: " + x );
|
|
}
|
|
|
|
var replTest = new ReplSetTest({name: 'testSet', nodes: 3, useBridge: true});
|
|
var nodes = replTest.startSet();
|
|
var hostnames = replTest.nodeList();
|
|
replTest.initiate(
|
|
{
|
|
"_id" : "testSet",
|
|
"members" : [
|
|
{"_id" : 0, "host" : hostnames[0], priority: 2},
|
|
{"_id" : 1, "host" : hostnames[1], priority: 0},
|
|
{"_id" : 2, "host" : hostnames[2], priority: 0}
|
|
],
|
|
"settings" : {
|
|
"chainingAllowed" : false
|
|
}
|
|
}
|
|
);
|
|
|
|
var master = replTest.getPrimary();
|
|
replTest.awaitReplication();
|
|
|
|
|
|
var breakNetwork = function() {
|
|
nodes[0].disconnect(nodes[2]);
|
|
master = replTest.getPrimary();
|
|
};
|
|
|
|
var checkNoChaining = function() {
|
|
master.getDB("test").foo.insert({x:1});
|
|
|
|
assert.soon(
|
|
function() {
|
|
return nodes[1].getDB("test").foo.findOne() != null;
|
|
}
|
|
);
|
|
|
|
var endTime = (new Date()).getTime()+10000;
|
|
while ((new Date()).getTime() < endTime) {
|
|
assert(nodes[2].getDB("test").foo.findOne() == null,
|
|
'Check that 2 does not catch up');
|
|
}
|
|
};
|
|
|
|
var forceSync = function() {
|
|
assert.soon(
|
|
function() {
|
|
var config = nodes[2].getDB("local").system.replset.findOne();
|
|
var targetHost = config.members[1].host;
|
|
printjson(nodes[2].getDB("admin").runCommand({replSetSyncFrom : targetHost}));
|
|
assert.soon(
|
|
function() {
|
|
return nodes[2].getDB("test").foo.findOne() != null;
|
|
},
|
|
'Check for data after force sync', 5000
|
|
);
|
|
return nodes[2].getDB("test").foo.findOne() != null;
|
|
},
|
|
'Check force sync still works'
|
|
);
|
|
};
|
|
|
|
// SERVER-12922
|
|
//
|
|
if (!_isWindows()) {
|
|
print("break the network so that node 2 cannot replicate");
|
|
breakNetwork();
|
|
|
|
print("make sure chaining is not happening");
|
|
checkNoChaining();
|
|
|
|
print("check that forcing sync target still works");
|
|
forceSync();
|
|
|
|
var config = master.getDB("local").system.replset.findOne();
|
|
assert.eq(false, config.settings.chainingAllowed, tojson(config));
|
|
}
|