summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllison Easton <allison.easton@mongodb.com>2022-10-07 12:34:20 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-10-14 11:44:05 +0000
commit23e97da1316c159fa59c0469c49d35d84fec5a70 (patch)
tree7251c12118e21fe19ede1157c1057d6e677289df
parentd6b251841c09766b1a2efef583151289f50b0a88 (diff)
downloadmongo-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.js19
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
}));
}