summaryrefslogtreecommitdiff
path: root/jstests/sharding/jumbo1.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/sharding/jumbo1.js')
-rw-r--r--jstests/sharding/jumbo1.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/jstests/sharding/jumbo1.js b/jstests/sharding/jumbo1.js
new file mode 100644
index 00000000000..fa5d13b9f2a
--- /dev/null
+++ b/jstests/sharding/jumbo1.js
@@ -0,0 +1,46 @@
+(function() {
+'use strict';
+
+load("jstests/sharding/libs/find_chunks_util.js");
+
+var s = new ShardingTest({shards: 2, other: {chunkSize: 1}});
+
+assert.commandWorked(s.s.adminCommand({enablesharding: "test", primaryShard: s.shard1.shardName}));
+assert.commandWorked(
+ s.s.adminCommand({addShardToZone: s.shard0.shardName, zone: 'finalDestination'}));
+
+// Set the chunk range with a zone that will cause the chunk to be in the wrong place so the
+// balancer will be forced to attempt to move it out.
+assert.commandWorked(s.s.adminCommand({shardcollection: "test.foo", key: {x: 1}}));
+assert.commandWorked(s.s.adminCommand(
+ {updateZoneKeyRange: 'test.foo', min: {x: 0}, max: {x: MaxKey}, zone: 'finalDestination'}));
+
+var db = s.getDB("test");
+
+const big = 'X'.repeat(1024 * 1024); // 1MB
+
+// Insert 3MB of documents to create a jumbo chunk, and use the same shard key in all of
+// them so that the chunk cannot be split.
+var bulk = db.foo.initializeUnorderedBulkOp();
+for (var i = 0; i < 3; i++) {
+ bulk.insert({x: 0, big: big});
+}
+
+assert.commandWorked(bulk.execute());
+
+s.startBalancer();
+
+// Wait for the balancer to try to move the chunk and mark it as jumbo.
+assert.soon(() => {
+ let chunk = findChunksUtil.findOneChunkByNs(s.getDB('config'), 'test.foo', {min: {x: 0}});
+ if (chunk == null) {
+ // Balancer hasn't run and enforce the zone boundaries yet.
+ return false;
+ }
+
+ assert.eq(s.shard1.shardName, chunk.shard, `${tojson(chunk)} was moved by the balancer`);
+ return chunk.jumbo;
+});
+
+s.stop();
+})();