blob: 50521a756a01c528ae61683e868e49c5fd56618c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
// Test that a delayed secondary in a replica set still succeeds as a sync source.
// First, we disconnect the primary from the non-delayed secondary. Next, we issue
// a write to the primary and ensure this write propagates
// to the disconnected node via the delayed secondary.
//
// @tags: [
// ]
load("jstests/replsets/rslib.js");
var replTest = new ReplSetTest({nodes: 3, useBridge: true});
var nodes = replTest.startSet();
var config = replTest.getReplSetConfig();
// ensure member 0 is primary
config.members[0].priority = 2;
config.members[1].priority = 0;
config.members[1].secondaryDelaySecs = 5;
config.members[2].priority = 0;
replTest.initiate(config);
var primary = replTest.getPrimary().getDB(jsTestName());
// The default WC is majority and stopServerReplication could prevent satisfying any majority
// writes.
assert.commandWorked(primary.adminCommand(
{setDefaultRWConcern: 1, defaultWriteConcern: {w: 1}, writeConcern: {w: "majority"}}));
replTest.awaitReplication();
var secondaryConns = replTest.getSecondaries();
var secondaries = [];
for (var i in secondaryConns) {
var d = secondaryConns[i].getDB(jsTestName());
d.getMongo().setSecondaryOk();
secondaries.push(d);
}
waitForAllMembers(primary);
nodes[0].disconnect(nodes[2]);
primary.foo.insert({x: 1});
syncFrom(nodes[1], nodes[0], replTest);
// make sure the record still appears in the remote secondary
assert.soon(function() {
return secondaries[1].foo.findOne() != null;
});
replTest.stopSet();
|