diff options
Diffstat (limited to 'jstests/slow1/mr_during_migrate.js')
-rw-r--r-- | jstests/slow1/mr_during_migrate.js | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/jstests/slow1/mr_during_migrate.js b/jstests/slow1/mr_during_migrate.js new file mode 100644 index 00000000000..cb439aeb241 --- /dev/null +++ b/jstests/slow1/mr_during_migrate.js @@ -0,0 +1,113 @@ +// 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(); |