2012-07-27 19:23:20 -04:00
|
|
|
//
|
|
|
|
|
// MultiVersion utility functions for clusters
|
|
|
|
|
//
|
|
|
|
|
|
2014-09-26 15:03:51 -04:00
|
|
|
/**
|
|
|
|
|
* Restarts the specified binaries in options to the binVersion. Note: this does not
|
|
|
|
|
* perform any upgrade operations.
|
|
|
|
|
*
|
|
|
|
|
* @param binVersion {string}
|
|
|
|
|
* @param options {Object} format:
|
|
|
|
|
*
|
|
|
|
|
* {
|
|
|
|
|
* upgradeShards: <bool>, // defaults to true
|
|
|
|
|
* upgradeConfigs: <bool>, // defaults to true
|
|
|
|
|
* upgradeMongos: <bool>, // defaults to true
|
|
|
|
|
* }
|
|
|
|
|
*/
|
2012-07-27 19:23:20 -04:00
|
|
|
ShardingTest.prototype.upgradeCluster = function( binVersion, options ){
|
|
|
|
|
|
|
|
|
|
options = options || {}
|
|
|
|
|
if( options.upgradeShards == undefined ) options.upgradeShards = true
|
|
|
|
|
if( options.upgradeConfigs == undefined ) options.upgradeConfigs = true
|
|
|
|
|
if( options.upgradeMongos == undefined ) options.upgradeMongos = true
|
|
|
|
|
|
|
|
|
|
if( options.upgradeMongos ){
|
|
|
|
|
|
|
|
|
|
// Upgrade all mongos hosts if specified
|
|
|
|
|
|
|
|
|
|
var numMongoses = this._mongos.length
|
|
|
|
|
|
|
|
|
|
for( var i = 0; i < numMongoses; i++ ){
|
|
|
|
|
|
|
|
|
|
var mongos = this._mongos[i]
|
|
|
|
|
|
|
|
|
|
MongoRunner.stopMongos( mongos )
|
|
|
|
|
|
2012-12-19 15:23:57 -05:00
|
|
|
mongos = MongoRunner.runMongos({ restart : mongos,
|
|
|
|
|
binVersion : binVersion,
|
|
|
|
|
appendOptions : true })
|
2012-07-27 19:23:20 -04:00
|
|
|
|
|
|
|
|
this[ "s" + i ] = this._mongos[i] = mongos
|
|
|
|
|
if( i == 0 ) this.s = mongos
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.config = this.s.getDB( "config" )
|
|
|
|
|
this.admin = this.s.getDB( "admin" )
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var upgradedSingleShards = []
|
|
|
|
|
|
|
|
|
|
if( options.upgradeShards ){
|
|
|
|
|
|
|
|
|
|
var numShards = this._connections.length
|
|
|
|
|
|
|
|
|
|
// Upgrade shards
|
|
|
|
|
for( var i = 0; i < numShards; i++ ){
|
|
|
|
|
|
|
|
|
|
if( this._rs && this._rs[i] ){
|
2012-12-19 15:23:57 -05:00
|
|
|
|
2012-07-27 19:23:20 -04:00
|
|
|
// Upgrade replica set
|
|
|
|
|
var rst = this._rs[i].test
|
|
|
|
|
|
2015-03-12 14:35:01 -04:00
|
|
|
rst.upgradeSet({ binVersion: binVersion });
|
2012-07-27 19:23:20 -04:00
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
|
|
// Upgrade shard
|
|
|
|
|
var shard = this._connections[i]
|
|
|
|
|
|
|
|
|
|
MongoRunner.stopMongod( shard )
|
|
|
|
|
|
2012-12-19 15:23:57 -05:00
|
|
|
shard = MongoRunner.runMongod({ restart : shard,
|
|
|
|
|
binVersion : binVersion,
|
|
|
|
|
appendOptions : true })
|
2012-07-27 19:23:20 -04:00
|
|
|
|
|
|
|
|
upgradedSingleShards[ shard.host ] = shard
|
|
|
|
|
|
|
|
|
|
this[ "shard" + i ] = this[ "d" + i ] = this._connections[i] = shard
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if( options.upgradeConfigs ){
|
|
|
|
|
|
|
|
|
|
// Upgrade config servers if they aren't already upgraded shards
|
|
|
|
|
var numConfigs = this._configServers.length
|
|
|
|
|
|
|
|
|
|
for( var i = 0; i < numConfigs; i++ ){
|
|
|
|
|
|
|
|
|
|
var configSvr = this._configServers[i]
|
|
|
|
|
|
|
|
|
|
if( configSvr.host in upgradedSingleShards ){
|
|
|
|
|
|
|
|
|
|
configSvr = upgradedSingleShards[ configSvr.host ]
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
|
|
|
|
|
MongoRunner.stopMongod( configSvr )
|
|
|
|
|
|
2012-12-19 15:23:57 -05:00
|
|
|
configSvr = MongoRunner.runMongod({ restart : configSvr,
|
|
|
|
|
binVersion : binVersion,
|
|
|
|
|
appendOptions : true })
|
2012-07-27 19:23:20 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this[ "config" + i ] = this[ "c" + i ] = this._configServers[i] = configSvr
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2012-12-19 15:23:57 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ShardingTest.prototype.restartMongoses = function() {
|
|
|
|
|
|
|
|
|
|
var numMongoses = this._mongos.length;
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < numMongoses; i++) {
|
|
|
|
|
|
|
|
|
|
var mongos = this._mongos[i];
|
|
|
|
|
|
|
|
|
|
MongoRunner.stopMongos(mongos);
|
|
|
|
|
mongos = MongoRunner.runMongos({ restart : mongos })
|
|
|
|
|
|
|
|
|
|
this[ "s" + i ] = this._mongos[i] = mongos;
|
|
|
|
|
if( i == 0 ) this.s = mongos;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.config = this.s.getDB( "config" )
|
|
|
|
|
this.admin = this.s.getDB( "admin" )
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ShardingTest.prototype.getMongosAtVersion = function(binVersion) {
|
|
|
|
|
var mongoses = this._mongos;
|
|
|
|
|
for (var i = 0; i < mongoses.length; i++) {
|
|
|
|
|
try {
|
|
|
|
|
var version = mongoses[i].getDB("admin").runCommand("serverStatus").version;
|
|
|
|
|
if (version.indexOf(binVersion) == 0) {
|
|
|
|
|
return mongoses[i];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (e) {
|
|
|
|
|
printjson(e);
|
|
|
|
|
print(mongoses[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|