diff options
author | Allison Easton <allison.easton@mongodb.com> | 2022-10-07 12:34:20 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-10-14 11:44:05 +0000 |
commit | 23e97da1316c159fa59c0469c49d35d84fec5a70 (patch) | |
tree | 7251c12118e21fe19ede1157c1057d6e677289df | |
parent | d6b251841c09766b1a2efef583151289f50b0a88 (diff) | |
download | mongo-23e97da1316c159fa59c0469c49d35d84fec5a70.tar.gz |
SERVER-66834 Zones created by defragmentation_util.js must always align with chunks
(cherry picked from commit 9dee997bd163ea0c0ab136ea74a95c58b1e70e98)
-rw-r--r-- | jstests/sharding/libs/defragmentation_util.js | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/jstests/sharding/libs/defragmentation_util.js b/jstests/sharding/libs/defragmentation_util.js index 482b5489150..f416bafa7f7 100644 --- a/jstests/sharding/libs/defragmentation_util.js +++ b/jstests/sharding/libs/defragmentation_util.js @@ -25,7 +25,9 @@ var defragmentationUtil = (function() { } createAndDistributeChunks(mongos, ns, numChunks, chunkSpacing); - createRandomZones(mongos, ns, numZones, chunkSpacing); + // Created zones will line up exactly with existing chunks so as not to trigger zone + // violations in the balancer. + createRandomZones(mongos, ns, numZones); fillChunksToRandomSize(mongos, ns, docSizeBytes, maxChunkFillMB); const beginningNumberChunks = findChunksUtil.countChunksForNs(mongos.getDB('config'), ns); @@ -53,19 +55,18 @@ var defragmentationUtil = (function() { } }; - let createRandomZones = function(mongos, ns, numZones, chunkSpacing) { - for (let i = -Math.floor(numZones / 2); i < Math.ceil(numZones / 2); i++) { + let createRandomZones = function(mongos, ns, numZones) { + let existingChunks = findChunksUtil.findChunksByNs(mongos.getDB('config'), ns); + existingChunks = Array.shuffle(existingChunks.toArray()); + for (let i = 0; i < numZones; i++) { let zoneName = "Zone" + i; - let shardForZone = - findChunksUtil - .findOneChunkByNs(mongos.getDB('config'), ns, {min: {key: i * chunkSpacing}}) - .shard; + let shardForZone = existingChunks[i].shard; assert.commandWorked( mongos.adminCommand({addShardToZone: shardForZone, zone: zoneName})); assert.commandWorked(mongos.adminCommand({ updateZoneKeyRange: ns, - min: {key: i * chunkSpacing}, - max: {key: i * chunkSpacing + chunkSpacing}, + min: existingChunks[i].min, + max: existingChunks[i].max, zone: zoneName })); } |