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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
//
// Tests launching multi-version ShardingTest clusters
//
load('./jstests/multiVersion/libs/verify_versions.js');
(function() {
"use strict";
// Check our latest versions
var versionsToCheck = [ "last-stable",
"latest" ];
var versionsToCheckMongos = [ "last-stable" ];
jsTest.log( "Testing legacy versions..." );
for( var i = 0; i < versionsToCheck.length; i++ ){
var version = versionsToCheck[ i ];
// Set up a cluster
var st = new ShardingTest({ shards : 2,
mongos : 2,
sync: true, // Old clusters can't use replsets for config servers
other : {
mongosOptions : { binVersion : version },
configOptions : { binVersion : version },
shardOptions : { binVersion : version }
} });
var shards = [ st.shard0, st.shard1 ];
var mongoses = [ st.s0, st.s1 ];
var configs = [ st.config0 ];
// Make sure the started versions are actually the correct versions
for( var j = 0; j < shards.length; j++ ) assert.binVersion( shards[j], version );
for( j = 0; j < mongoses.length; j++ ) assert.binVersion( mongoses[j], version );
for( j = 0; j < configs.length; j++ ) assert.binVersion( configs[j], version );
st.stop();
}
jsTest.log( "Testing mixed versions..." );
// Set up a multi-version cluster
st = new ShardingTest({ shards : 2,
mongos : 2,
other : {
// Three config servers
sync : true,
mongosOptions : { binVersion : versionsToCheckMongos },
configOptions : { binVersion : versionsToCheck },
shardOptions : { binVersion : versionsToCheck }
} });
shards = [ st.shard0, st.shard1 ];
mongoses = [ st.s0, st.s1 ];
configs = [ st.config0, st.config1, st.config2 ];
// Make sure we have hosts of all the different versions
var versionsFound = [];
for ( j = 0; j < shards.length; j++ )
versionsFound.push( shards[j].getBinVersion() );
assert.allBinVersions( versionsToCheck, versionsFound );
versionsFound = [];
for ( j = 0; j < mongoses.length; j++ )
versionsFound.push( mongoses[j].getBinVersion() );
assert.allBinVersions( versionsToCheckMongos, versionsFound );
versionsFound = [];
for ( j = 0; j < configs.length; j++ )
versionsFound.push( configs[j].getBinVersion() );
assert.allBinVersions( versionsToCheck, versionsFound );
st.stop();
jsTest.log( "Testing mixed versions with replica sets..." );
// Set up a multi-version cluster w/ replica sets
st = new ShardingTest({ shards : 2,
mongos : 2,
other : {
// Three config servers
sync : true,
// Replica set shards
rs : true,
mongosOptions : { binVersion : versionsToCheckMongos },
configOptions : { binVersion : versionsToCheck },
rsOptions : { binVersion : versionsToCheck, protocolVersion: 0 }
} });
var nodesA = st.rs0.nodes;
var nodesB = st.rs1.nodes;
mongoses = [ st.s0, st.s1 ];
configs = [ st.config0, st.config1, st.config2 ];
var getVersion = function( mongo ){
var result = mongo.getDB( "admin" ).runCommand({ serverStatus : 1 });
return result.version;
};
// Make sure we have hosts of all the different versions
versionsFound = [];
for ( j = 0; j < nodesA.length; j++ )
versionsFound.push( nodesA[j].getBinVersion() );
assert.allBinVersions( versionsToCheck, versionsFound );
versionsFound = [];
for ( j = 0; j < nodesB.length; j++ )
versionsFound.push( nodesB[j].getBinVersion() );
assert.allBinVersions( versionsToCheck, versionsFound );
versionsFound = [];
for ( j = 0; j < mongoses.length; j++ )
versionsFound.push( mongoses[j].getBinVersion() );
assert.allBinVersions( versionsToCheckMongos, versionsFound );
versionsFound = [];
for ( j = 0; j < configs.length; j++ )
versionsFound.push( configs[j].getBinVersion() );
assert.allBinVersions( versionsToCheck, versionsFound );
jsTest.log("DONE!");
st.stop();
})();
|