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
50
51
52
53
54
55
56
57
58
59
60
|
// should check that election happens in priority order
doTest = function( signal ) {
var replTest = new ReplSetTest( {name: 'testSet', nodes: 3} );
var nodes = replTest.nodeList();
replTest.startSet();
replTest.initiate({"_id" : "testSet",
"members" : [
{"_id" : 0, "host" : nodes[0], "priority" : 1},
{"_id" : 1, "host" : nodes[1], "priority" : 2},
{"_id" : 2, "host" : nodes[2], "priority" : 3}]});
// 2 should be master (give this a while to happen, as 0 will be elected, then demoted)
assert.soon(function() {
var m2 = replTest.nodes[2].getDB("admin").runCommand({ismaster:1});
return m2.ismaster;
}, 'highest priority is master', 120000);
// kill 2, 1 should take over
replTest.stop(2);
// do some writes on 1
master = replTest.getMaster();
for (i=0; i<1000; i++) {
master.getDB("foo").bar.insert({i:i});
}
sleep(10000);
for (i=0; i<1000; i++) {
master.getDB("bar").baz.insert({i:i});
}
var m1 = replTest.nodes[1].getDB("admin").runCommand({ismaster:1})
assert(m1.ismaster, 'node 2 is master');
// bring 2 back up, 2 should wait until caught up and then become master
replTest.restart(2);
assert.soon(function() {
try {
m2 = replTest.nodes[2].getDB("admin").runCommand({ismaster:1})
return m2.ismaster;
}
catch (e) {
print(e);
}
return false;
}, 'node 2 is master again');
// make sure nothing was rolled back
master = replTest.getMaster();
for (i=0; i<1000; i++) {
assert(master.getDB("foo").bar.findOne({i:i}) != null, 'checking '+i);
assert(master.getDB("bar").baz.findOne({i:i}) != null, 'checking '+i);
}
}
doTest( 15 );
|