mirror of
https://github.com/mongodb/mongo.git
synced 2024-12-01 01:21:03 +01:00
113 lines
3.1 KiB
JavaScript
113 lines
3.1 KiB
JavaScript
// Do parallel ops with migrates occurring
|
|
// @tags: [requires_sharding]
|
|
|
|
(function() {
|
|
'use strict';
|
|
|
|
var st = new ShardingTest({shards: 10, mongos: 2, verbose: 2});
|
|
|
|
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();
|
|
})();
|