blob: 28e86ec8d32370eca2f5f12b098afb66ffa6a773 (
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
/**
* Test for making sure that the replica seed list in the config server does not
* become invalid when a replica set reconfig happens.
*/
(function() {
"use strict";
var NODE_COUNT = 3;
var st = new ShardingTest({shards: {rs0: {nodes: NODE_COUNT, oplogSize: 10}}});
var replTest = st.rs0;
var mongos = st.s;
var shardDoc = mongos.getDB('config').shards.findOne();
assert.eq(NODE_COUNT, shardDoc.host.split(',').length); // seed list should contain all nodes
/* Make sure that the first node is not the primary (by making the second one primary).
* We need to do this since the ReplicaSetMonitor iterates over the nodes one
* by one and you can't remove a node that is currently the primary.
*/
var connPoolStats = mongos.getDB('admin').runCommand({connPoolStats: 1});
var targetHostName = connPoolStats['replicaSets'][replTest.name].hosts[1].addr;
var priConn = replTest.getPrimary();
var confDoc = priConn.getDB("local").system.replset.findOne();
for (var idx = 0; idx < confDoc.members.length; idx++) {
if (confDoc.members[idx].host == targetHostName) {
confDoc.members[idx].priority = 100;
} else {
confDoc.members[idx].priority = 1;
}
}
confDoc.version++;
jsTest.log('Changing conf to ' + tojson(confDoc));
try {
priConn.getDB('admin').adminCommand({replSetReconfig: confDoc});
} catch (x) {
print('Expected exception because of reconfig' + x);
}
ReplSetTest.awaitRSClientHosts(mongos, {host: targetHostName}, {ok: true, ismaster: true});
// Remove first node from set
confDoc.members.shift();
confDoc.version++;
try {
replTest.getPrimary().getDB('admin').adminCommand({replSetReconfig: confDoc});
} catch (x) {
print('Expected exception because of reconfig: ' + x);
}
assert.soon(function() {
var connPoolStats = mongos.getDB('admin').runCommand('connPoolStats');
var replView = connPoolStats.replicaSets[replTest.name].hosts;
jsTest.log('current replView: ' + tojson(replView));
return replView.length == NODE_COUNT - 1;
});
assert.soon(function() {
shardDoc = mongos.getDB('config').shards.findOne();
jsTest.log('shardDoc: ' + tojson(shardDoc));
// seed list should contain one less node
return shardDoc.host.split(',').length == NODE_COUNT - 1;
});
st.stop();
}());
|