Files
mongo/jstests/multiVersion/4_upgrade_cluster.js
2012-08-01 09:49:46 -04:00

145 lines
3.8 KiB
JavaScript

//
// Upgrades a cluster to a newer version
//
load( './jstests/multiVersion/libs/multi_rs.js' )
load( './jstests/multiVersion/libs/multi_cluster.js' )
load( './jstests/libs/test_background_ops.js' )
var oldVersion = "2.0.6"
var newVersion = "latest"
// BIG OUTER LOOP, RS CLUSTER OR NOT!
for( var test = 0; test < 1; test++ ){
// TODO: RS Test messes up here
var isRSCluster = test == 1
jsTest.log( "Starting " + ( isRSCluster ? "(replica set)" : "" ) + " cluster..." )
var options = {
mongosOptions : { binVersion : oldVersion },
configOptions : { binVersion : oldVersion },
shardOptions : { binVersion : oldVersion },
separateConfig : true,
sync : true,
rs : isRSCluster
}
var st = new ShardingTest({ shards : 2, mongos : 2, other : options })
jsTest.log( "Starting parallel operations during upgrade..." )
var insertNS = "test.foo"
var shardedInsertNS = "test.bar"
var admin = st.s.getDB( "admin" )
var shards = st.s.getDB( "config" ).shards.find().toArray()
printjson( admin.runCommand({ enableSharding : shardedInsertNS }) )
printjson( admin.runCommand({ movePrimary : shardedInsertNS, to : shards[0]._id }) )
printjson( admin.runCommand({ shardCollection : shardedInsertNS, key : { _id : 1 } }) )
st.stopBalancer()
for( var i = 0; i < 5; i++ ){
printjson( admin.runCommand({ split : shardedInsertNS, middle : { _id : i * 50 } }) )
printjson( admin.runCommand({ moveChunk : shardedInsertNS,
find : { _id : i * 50 },
to : shards[ i % shards.length ]._id }) )
}
function findAndInsert( mongosURL, ns ){
var coll = null
// Make sure we can eventually connect to the mongos
assert.soon( function(){
try{
coll = new Mongo( mongosURL ).getCollection( ns + "" )
return true
}
catch( e ){
printjson( e )
return false
}
})
var count = 0
jsTest.log( "Starting finds and inserts..." )
while( ! isFinished() ){
try{
coll.insert({ _id : count, hello : "world" })
assert.eq( null, coll.getDB().getLastError() )
assert.neq( null, coll.findOne({ _id : count }) )
}
catch( e ){
printjson( e )
}
count++
}
jsTest.log( "Finished finds and inserts..." )
return count
}
var staticMongod = MongoRunner.runMongod({})
printjson( staticMongod )
var joinFindInsert =
startParallelOps( staticMongod, // The connection where the test info is passed and stored
findAndInsert,
[ st.s0.host, insertNS ] )
var joinShardedFindInsert =
startParallelOps( staticMongod, // The connection where the test info is passed and stored
findAndInsert,
[ st.s1.host, shardedInsertNS ] )
jsTest.log( "Upgrading cluster..." )
st.upgradeCluster( newVersion )
jsTest.log( "Cluster upgraded." )
st.printShardingStatus()
// Allow more valid writes to go through
sleep( 10 * 1000 )
joinFindInsert()
joinShardedFindInsert()
var totalInserts = st.s.getCollection( insertNS ).find().sort({ _id : -1 }).next()._id + 1
var dataFound = st.s.getCollection( insertNS ).count()
jsTest.log( "Found " + dataFound + " docs out of " + totalInserts + " inserted." )
assert.gt( dataFound / totalInserts, 0.5 )
var totalInserts = st.s.getCollection( shardedInsertNS ).find().sort({ _id : -1 }).next()._id + 1
var dataFound = st.s.getCollection( shardedInsertNS ).find().itcount()
jsTest.log( "Found " + dataFound + " sharded docs out of " + tojson( totalInserts ) + " inserted." )
assert.gt( dataFound / totalInserts, 0.5 )
jsTest.log( "DONE!" )
st.stop()
} // END OUTER LOOP FOR RS CLUSTER