summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPierlauro Sciarelli <pierlauro.sciarelli@mongodb.com>2023-04-28 07:50:21 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2023-04-28 08:22:02 +0000
commit26b4851a412cc8b9b4a18cdb6cd0f9f642e06aa7 (patch)
tree1d78265a333325eaf8a8c8404bec34b5386fbce7 /src
parent8c9ab2dc711df435840237c90fb04d6ff3cb8b71 (diff)
SERVER-76550 Shards undergoing draining must chop big chunks to move them offr6.0.6-rc1r6.0.6
Diffstat (limited to 'src')
-rw-r--r--src/mongo/db/s/balancer/balancer_policy.cpp55
1 files changed, 43 insertions, 12 deletions
diff --git a/src/mongo/db/s/balancer/balancer_policy.cpp b/src/mongo/db/s/balancer/balancer_policy.cpp
index 29aa72109ac..6d4c1be900a 100644
--- a/src/mongo/db/s/balancer/balancer_policy.cpp
+++ b/src/mongo/db/s/balancer/balancer_policy.cpp
@@ -504,11 +504,26 @@ MigrateInfosWithReason BalancerPolicy::balance(
return boost::none;
}();
- migrations.emplace_back(to,
- distribution.nss(),
- chunk,
- MoveChunkRequest::ForceJumbo::kForceBalancer,
- maxChunkSizeBytes);
+ if (collDataSizeInfo.has_value()) {
+ migrations.emplace_back(
+ to,
+ chunk.getShard(),
+ distribution.nss(),
+ chunk.getCollectionUUID(),
+ chunk.getMin(),
+ boost::none /* max */,
+ chunk.getVersion(),
+ // Always force jumbo chunks to be migrated off draining shards
+ MoveChunkRequest::ForceJumbo::kForceBalancer,
+ maxChunkSizeBytes);
+ } else {
+ migrations.emplace_back(to,
+ distribution.nss(),
+ chunk,
+ MoveChunkRequest::ForceJumbo::kForceBalancer,
+ maxChunkSizeBytes);
+ }
+
if (firstReason == MigrationReason::none) {
firstReason = MigrationReason::drain;
}
@@ -584,12 +599,28 @@ MigrateInfosWithReason BalancerPolicy::balance(
return boost::none;
}();
- migrations.emplace_back(to,
- distribution.nss(),
- chunk,
- forceJumbo ? MoveChunkRequest::ForceJumbo::kForceBalancer
- : MoveChunkRequest::ForceJumbo::kDoNotForce,
- maxChunkSizeBytes);
+ if (collDataSizeInfo.has_value()) {
+ migrations.emplace_back(to,
+ chunk.getShard(),
+ distribution.nss(),
+ chunk.getCollectionUUID(),
+ chunk.getMin(),
+ boost::none /* max */,
+ chunk.getVersion(),
+ forceJumbo
+ ? MoveChunkRequest::ForceJumbo::kForceBalancer
+ : MoveChunkRequest::ForceJumbo::kDoNotForce,
+ maxChunkSizeBytes);
+ } else {
+ migrations.emplace_back(to,
+ distribution.nss(),
+ chunk,
+ forceJumbo
+ ? MoveChunkRequest::ForceJumbo::kForceBalancer
+ : MoveChunkRequest::ForceJumbo::kDoNotForce,
+ maxChunkSizeBytes);
+ }
+
if (firstReason == MigrationReason::none) {
firstReason = MigrationReason::zoneViolation;
}
@@ -882,7 +913,7 @@ bool BalancerPolicy::_singleZoneBalanceBasedOnDataSize(
distribution.nss(),
chunk.getCollectionUUID(),
chunk.getMin(),
- boost::none /* call moveRange*/,
+ boost::none /* max */,
chunk.getVersion(),
forceJumbo,
collDataSizeInfo.maxChunkSizeBytes);