Files
mongo/jstests/replsets/sync2.js
Kaloian Manassiev c078dc37a9 SERVER-21050 Cleanup ReplSetTest
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.
2015-12-08 13:15:06 -05:00

51 lines
1.8 KiB
JavaScript

var replTest = new ReplSetTest({name: 'sync2', nodes: 5, useBridge: true});
var nodes = replTest.nodeList();
var conns = replTest.startSet({oplogSize: "2"});
replTest.initiate({"_id": "sync2",
"members": [
{"_id": 0, host: nodes[0], priority: 2},
{"_id": 1, host: nodes[1]},
{"_id": 2, host: nodes[2]},
{"_id": 3, host: nodes[3]},
{"_id": 4, host: nodes[4]}]
});
var master = replTest.getPrimary();
jsTestLog("Replica set test initialized");
// initial sync
master.getDB("foo").bar.insert({x:1});
replTest.awaitReplication();
conns[0].disconnect(conns[4]);
conns[1].disconnect(conns[2]);
conns[2].disconnect(conns[3]);
conns[3].disconnect(conns[1]);
// 4 is connected to 2
conns[4].disconnect(conns[1]);
conns[4].disconnect(conns[3]);
assert.soon(function() {
master = replTest.getPrimary();
return master === conns[0];
}, 60 * 1000, "node 0 did not become primary quickly enough");
replTest.awaitReplication();
jsTestLog("Checking that ops still replicate correctly");
var option = { writeConcern: { w: 5, wtimeout: 30000 }};
// In PV0, this write can fail as a result of a bad spanning tree. If 2 was syncing from 4 prior to
// bridging, it will not change sync sources and receive the write in time. This was not a problem
// in 3.0 because the old version of mongobridge caused all the nodes to restart during
// partitioning, forcing the set to rebuild the spanning tree.
assert.writeOK(master.getDB("foo").bar.insert({ x: 1 }, option));
// 4 is connected to 3
conns[4].disconnect(conns[2]);
conns[4].reconnect(conns[3]);
option = { writeConcern: { w: 5, wtimeout: 30000 }};
assert.writeOK(master.getDB("foo").bar.insert({ x: 1 }, option));
replTest.stopSet();