mirror of
https://github.com/mongodb/mongo.git
synced 2024-12-01 01:21:03 +01:00
64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
load("jstests/replsets/rslib.js");
|
|
|
|
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() {
|
|
syncFrom(nodes[2], nodes[1], replTest);
|
|
assert.soon(function() {
|
|
return nodes[2].getDB("test").foo.findOne() != null;
|
|
}, 'Check for data after force sync');
|
|
};
|
|
|
|
// 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));
|
|
}
|
|
|
|
replTest.stopSet(); |