summaryrefslogtreecommitdiff
path: root/jstests/sharding/large_chunk.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/sharding/large_chunk.js')
-rw-r--r--jstests/sharding/large_chunk.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/jstests/sharding/large_chunk.js b/jstests/sharding/large_chunk.js
new file mode 100644
index 00000000000..7506f03e14a
--- /dev/null
+++ b/jstests/sharding/large_chunk.js
@@ -0,0 +1,66 @@
+// Where we test operations dealing with large chunks
+(function() {
+
+// Starts a new sharding environment limiting the chunksize to 1GB (highest value allowed).
+// Note that early splitting will start with a 1/4 of max size currently.
+var s = new ShardingTest({ name: 'large_chunk',
+ shards: 2,
+ verbose: 2,
+ other: { chunkSize: 1024 } });
+
+// take the balancer out of the equation
+s.config.settings.update( { _id: "balancer" }, { $set : { stopped: true } } , true );
+s.config.settings.find().forEach(printjson);
+
+db = s.getDB( "test" );
+
+//
+// Step 1 - Test moving a large chunk
+//
+
+// Turn on sharding on the 'test.foo' collection and generate a large chunk
+s.adminCommand( { enablesharding : "test" } );
+s.ensurePrimaryShard('test', 'shard0001');
+
+bigString = ""
+while ( bigString.length < 10000 )
+ bigString += "asdasdasdasdadasdasdasdasdasdasdasdasda";
+
+inserted = 0;
+num = 0;
+var bulk = db.foo.initializeUnorderedBulkOp();
+while ( inserted < ( 400 * 1024 * 1024 ) ){
+ bulk.insert({ _id: num++, s: bigString });
+ inserted += bigString.length;
+}
+assert.writeOK(bulk.execute());
+
+s.adminCommand( { shardcollection : "test.foo" , key : { _id : 1 } } );
+
+assert.eq( 1 , s.config.chunks.count() , "step 1 - need one large chunk" );
+
+primary = s.getServer( "test" ).getDB( "test" );
+secondary = s.getOther( primary ).getDB( "test" );
+
+// Make sure that we don't move that chunk if it goes past what we consider the maximum chunk size
+print("Checkpoint 1a")
+max = 200 * 1024 * 1024;
+assert.throws(function() {
+ s.adminCommand({ movechunk: "test.foo",
+ find: { _id: 1 },
+ to: secondary.getMongo().name,
+ maxChunkSizeBytes: max });
+ });
+
+// Move the chunk
+print("checkpoint 1b");
+before = s.config.chunks.find().toArray();
+s.adminCommand( { movechunk : "test.foo" , find : { _id : 1 } , to : secondary.getMongo().name } );
+after = s.config.chunks.find().toArray();
+assert.neq( before[0].shard , after[0].shard , "move chunk did not work" );
+
+s.config.changelog.find().forEach( printjson )
+
+s.stop();
+
+})();