Files
mongo/jstests/slow2/mr_during_migrate.js
Kaloian Manassiev c078dc37a9 SERVER-21050 Cleanup ReplSetTest
This is just a cleanup work to hide some of the private state of
ReplSetTest so it is easier to encapsulate and add new logic. Also enables
strict mode.
2015-12-08 13:15:06 -05:00

111 lines
2.9 KiB
JavaScript

// Do parallel ops with migrates occurring
var st = new ShardingTest({ shards : 10, mongos : 2, verbose : 2 })
jsTest.log( "Doing parallel operations..." )
//Stop balancer, since it'll just get in the way of these
st.stopBalancer()
var mongos = st.s0
var admin = mongos.getDB("admin")
var coll = st.s.getCollection( jsTest.name() + ".coll" )
var numDocs = 1024 * 1024
var dataSize = 1024 // bytes, must be power of 2
var data = "x"
while( data.length < dataSize ) data += data
var bulk = coll.initializeUnorderedBulkOp();
for( var i = 0; i < numDocs; i++ ){
bulk.insert({ _id: i, data: data });
}
assert.writeOK(bulk.execute());
// Make sure everything got inserted
assert.eq( numDocs, coll.find().itcount() )
jsTest.log( "Inserted " + sh._dataFormat( dataSize * numDocs ) + " of data." )
// Shard collection
st.shardColl( coll, { _id : 1 }, false )
st.printShardingStatus()
jsTest.log( "Sharded collection now initialized, starting migrations..." )
var checkMigrate = function(){ print( "Result of migrate : " ); printjson( this ) }
// Creates a number of migrations of random chunks to diff shard servers
var ops = []
for(var i = 0; i < st._connections.length; i++) {
ops.push({
op: "command",
ns: "admin",
command: {
moveChunk: "" + coll,
find: { _id: { "#RAND_INT" : [ 0, numDocs ] }},
to: st._connections[i].shardName,
_waitForDelete: true
},
showResult: true
});
}
// TODO: Also migrate output collection
jsTest.log( "Starting migrations now..." )
var bid = benchStart({ ops : ops,
host : st.s.host,
parallel : 1,
handleErrors : false })
//#######################
// Tests during migration
var numTests = 5
for( var t = 0; t < numTests; t++ ){
jsTest.log( "Test #" + t )
var mongos = st.s1 // use other mongos so we get stale shard versions
var coll = mongos.getCollection( coll + "" )
var outputColl = mongos.getCollection( coll + "_output" )
var numTypes = 32
var map = function(){ emit( this._id % 32 /* must be hardcoded */, { c : 1 } ) }
var reduce = function( k, vals ){
var total = 0
for( var i = 0; i < vals.length; i++ ) total += vals[i].c
return { c : total }
}
printjson( coll.find({ _id : 0 }).itcount() )
jsTest.log( "Starting new mapReduce run #" + t )
//assert.eq( coll.find().itcount(), numDocs )
coll.getMongo().getDB("admin").runCommand({ setParameter : 1, traceExceptions : true })
printjson( coll.mapReduce( map, reduce, { out : { replace : outputColl.getName(), db : outputColl.getDB() + "" } }) );
jsTest.log( "MapReduce run #" + t + " finished." )
assert.eq( outputColl.find().itcount(), numTypes )
outputColl.find().forEach( function( x ){
assert.eq( x.value.c, numDocs / numTypes )
})
}
printjson( benchFinish( bid ) )
st.stop()