12
12
/* set slaveDelay to 30 seconds */
13
13
var config = replTest.getReplSetConfig();
14
14
config.members[2].priority = 0;
15
config.members[2].slaveDelay = 10;
15
config.members[2].slaveDelay = 30;
17
17
replTest.initiate(config);
19
19
var master = replTest.getMaster().getDB(name);
20
20
var slaveConns = replTest.liveNodes.slaves;
22
22
for (var i in slaveConns) {
23
23
var d = slaveConns[i].getDB(name);
24
d.getMongo().setSlaveOk();
28
27
waitForAllMembers(master);
35
34
assert.eq(doc.x, 1);
37
36
// make sure slave has it
38
var doc = slave[0].foo.findOne();
37
var doc = slaves[0].foo.findOne();
39
38
assert.eq(doc.x, 1);
41
40
// make sure delayed slave doesn't have it
42
assert.eq(slave[1].foo.findOne(), null);
44
41
for (var i=0; i<8; i++) {
45
assert.eq(slave[1].foo.findOne(), null);
42
assert.eq(slaves[1].foo.findOne(), null);
49
// now delayed slave should have it
46
// within 30 seconds delayed slave should have it
50
47
assert.soon(function() {
51
var z = slave[1].foo.findOne();
48
var z = slaves[1].foo.findOne();
52
49
return z && z.x == 1;
56
53
/************* Part 2 *******************/
58
// how about non-initial sync?
60
for (var i=0; i<100; i++) {
61
master.foo.insert({_id : i, "foo" : "bar"});
63
master.runCommand({getlasterror:1,w:2});
65
assert.eq(master.foo.findOne({_id : 99}).foo, "bar");
66
assert.eq(slave[0].foo.findOne({_id : 99}).foo, "bar");
67
assert.eq(slave[1].foo.findOne({_id : 99}), null);
69
for (var i=0; i<8; i++) {
70
assert.eq(slave[1].foo.findOne({_id:99}), null);
74
assert.soon(function() {
75
var z = slave[1].foo.findOne({_id : 99});
76
return z && z.foo == "bar";
79
/************* Part 3 *******************/
81
55
// how about if we add a new server? will it sync correctly?
83
56
conn = replTest.add();
85
58
config = master.getSisterDB("local").system.replset.findOne();
88
config.members.push({_id : 3, host : host+":"+replTest.ports[replTest.ports.length-1],priority:0, slaveDelay:10});
61
config.members.push({_id: 3,
62
host: host+":"+replTest.ports[replTest.ports.length-1],
90
66
master = reconfig(replTest, config);
91
67
master = master.getSisterDB(name);
93
// it should be all caught up now
69
// wait for the node to catch up
70
replTest.awaitReplication();
95
72
master.foo.insert({_id : 123, "x" : "foo"});
96
73
master.runCommand({getlasterror:1,w:2});
100
75
for (var i=0; i<8; i++) {
101
76
assert.eq(conn.getDB(name).foo.findOne({_id:123}), null);
130
106
master.foo.insert({_id : 124, "x" : "foo"});
131
107
assert(master.foo.findOne({_id:124}) != null);
133
for (var i=0; i<13; i++) {
109
for (var i=0; i<10; i++) {
134
110
assert.eq(conn.getDB(name).foo.findOne({_id:124}), null);
138
replTest.awaitReplication();
114
// the node should have the document in 15 seconds (20 for some safety against races)
115
assert.soon(function() {
116
return conn.getDB(name).foo.findOne({_id:124}) != null;
140
119
replTest.stopSet();