diff options
| author | Pierlauro Sciarelli <pierlauro.sciarelli@mongodb.com> | 2023-04-28 07:50:21 +0000 |
|---|---|---|
| committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-04-28 08:22:02 +0000 |
| commit | 26b4851a412cc8b9b4a18cdb6cd0f9f642e06aa7 (patch) | |
| tree | 1d78265a333325eaf8a8c8404bec34b5386fbce7 /src | |
| parent | 8c9ab2dc711df435840237c90fb04d6ff3cb8b71 (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.cpp | 55 |
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); |
