diff options
Diffstat (limited to 'jstests/sharding/large_chunk.js')
-rw-r--r-- | jstests/sharding/large_chunk.js | 66 |
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(); + +})(); |