summaryrefslogtreecommitdiff
path: root/jstests/sharding/autosplit_heuristics.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/sharding/autosplit_heuristics.js')
-rw-r--r--jstests/sharding/autosplit_heuristics.js110
1 files changed, 54 insertions, 56 deletions
diff --git a/jstests/sharding/autosplit_heuristics.js b/jstests/sharding/autosplit_heuristics.js
index cb5e1260cb9..c4d415ce0de 100644
--- a/jstests/sharding/autosplit_heuristics.js
+++ b/jstests/sharding/autosplit_heuristics.js
@@ -3,83 +3,81 @@
// works as expected even after splitting.
//
-var st = new ShardingTest({ shards : 1,
- mongos : 1,
- other : { mongosOptions : { chunkSize : 1, verbose : 2 }}});
+var st =
+ new ShardingTest({shards: 1, mongos: 1, other: {mongosOptions: {chunkSize: 1, verbose: 2}}});
-// The balancer is by default stopped, thus it will NOT interfere unpredictably with the chunk
+// The balancer is by default stopped, thus it will NOT interfere unpredictably with the chunk
// moves/splits depending on the timing.
// Test is not valid for debug build, heuristics get all mangled by debug reload behavior
-var isDebugBuild = st.s0.getDB( "admin" ).serverBuildInfo().debug;
+var isDebugBuild = st.s0.getDB("admin").serverBuildInfo().debug;
-if ( !isDebugBuild ) {
+if (!isDebugBuild) {
+ var mongos = st.s0;
+ var config = mongos.getDB("config");
+ var admin = mongos.getDB("admin");
+ var coll = mongos.getCollection("foo.hashBar");
-var mongos = st.s0;
-var config = mongos.getDB("config");
-var admin = mongos.getDB("admin");
-var coll = mongos.getCollection("foo.hashBar");
+ printjson(admin.runCommand({enableSharding: coll.getDB() + ""}));
+ printjson(admin.runCommand({shardCollection: coll + "", key: {_id: 1}}));
-printjson(admin.runCommand({ enableSharding : coll.getDB() + "" }));
-printjson(admin.runCommand({ shardCollection : coll + "", key : { _id : 1 } }));
+ var numChunks = 10;
-var numChunks = 10;
+ // Split off the low and high chunks, to get non-special-case behavior
+ printjson(admin.runCommand({split: coll + "", middle: {_id: 0}}));
+ printjson(admin.runCommand({split: coll + "", middle: {_id: numChunks + 1}}));
-// Split off the low and high chunks, to get non-special-case behavior
-printjson( admin.runCommand({ split : coll + "", middle : { _id : 0 } }) );
-printjson( admin.runCommand({ split : coll + "", middle : { _id : numChunks + 1 } }) );
+ // Split all the other chunks, and an extra chunk
+ // We need the extra chunk to compensate for the fact that the chunk differ resets the highest
+ // chunk's (i.e. the last-split-chunk's) data count on reload.
+ for (var i = 1; i < numChunks + 1; i++) {
+ printjson(admin.runCommand({split: coll + "", middle: {_id: i}}));
+ }
-// Split all the other chunks, and an extra chunk
-// We need the extra chunk to compensate for the fact that the chunk differ resets the highest
-// chunk's (i.e. the last-split-chunk's) data count on reload.
-for (var i = 1; i < numChunks + 1; i++) {
- printjson( admin.runCommand({ split : coll + "", middle : { _id : i } }) );
-}
-
-jsTest.log("Setup collection...");
-st.printShardingStatus(true);
+ jsTest.log("Setup collection...");
+ st.printShardingStatus(true);
-var approxSize = Object.bsonsize({ _id : 0.0 });
+ var approxSize = Object.bsonsize({_id: 0.0});
-jsTest.log("Starting inserts of approx size: " + approxSize + "...");
+ jsTest.log("Starting inserts of approx size: " + approxSize + "...");
-var chunkSizeBytes = 1024 * 1024;
+ var chunkSizeBytes = 1024 * 1024;
-// We insert slightly more than the max number of docs per chunk, to test
-// if resetting the chunk size happens during reloads. If the size is
-// reset, we'd expect to split less, since the first split would then
-// disable further splits (statistically, since the decision is randomized).
-// We choose 1.4 since split attempts happen about once every 1/5 chunksize,
-// and we want to be sure we def get a split attempt at a full chunk.
-var insertsForSplit = Math.ceil((chunkSizeBytes * 1.4) / approxSize);
-var totalInserts = insertsForSplit * numChunks;
+ // We insert slightly more than the max number of docs per chunk, to test
+ // if resetting the chunk size happens during reloads. If the size is
+ // reset, we'd expect to split less, since the first split would then
+ // disable further splits (statistically, since the decision is randomized).
+ // We choose 1.4 since split attempts happen about once every 1/5 chunksize,
+ // and we want to be sure we def get a split attempt at a full chunk.
+ var insertsForSplit = Math.ceil((chunkSizeBytes * 1.4) / approxSize);
+ var totalInserts = insertsForSplit * numChunks;
-printjson({ chunkSizeBytes : chunkSizeBytes,
- insertsForSplit : insertsForSplit,
- totalInserts : totalInserts });
+ printjson({
+ chunkSizeBytes: chunkSizeBytes,
+ insertsForSplit: insertsForSplit,
+ totalInserts: totalInserts
+ });
-// Insert enough docs to trigger splits into all chunks
-var bulk = coll.initializeUnorderedBulkOp();
-for (var i = 0; i < totalInserts; i++) {
- bulk.insert({ _id : i % numChunks + (i / totalInserts) });
-}
-assert.writeOK(bulk.execute());
+ // Insert enough docs to trigger splits into all chunks
+ var bulk = coll.initializeUnorderedBulkOp();
+ for (var i = 0; i < totalInserts; i++) {
+ bulk.insert({_id: i % numChunks + (i / totalInserts)});
+ }
+ assert.writeOK(bulk.execute());
-jsTest.log("Inserts completed...");
+ jsTest.log("Inserts completed...");
-st.printShardingStatus(true);
-printjson(coll.stats());
+ st.printShardingStatus(true);
+ printjson(coll.stats());
-// Check that all chunks (except the two extreme chunks)
-// have been split at least once + 1 extra chunk as reload buffer
-assert.gte(config.chunks.count(), numChunks * 2 + 3);
+ // Check that all chunks (except the two extreme chunks)
+ // have been split at least once + 1 extra chunk as reload buffer
+ assert.gte(config.chunks.count(), numChunks * 2 + 3);
-jsTest.log("DONE!");
+ jsTest.log("DONE!");
-}
-else {
- jsTest.log( "Disabled test in debug builds." );
+} else {
+ jsTest.log("Disabled test in debug builds.");
}
st.stop();
-