diff options
Diffstat (limited to 'src/mongo/db/s/balancer/balancer.cpp')
-rw-r--r-- | src/mongo/db/s/balancer/balancer.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/mongo/db/s/balancer/balancer.cpp b/src/mongo/db/s/balancer/balancer.cpp index fdb36b34bdf..7432d038afc 100644 --- a/src/mongo/db/s/balancer/balancer.cpp +++ b/src/mongo/db/s/balancer/balancer.cpp @@ -775,13 +775,24 @@ void Balancer::_mainThread() { LOGV2_DEBUG(21861, 1, "Done enforcing tag range boundaries."); } - stdx::unordered_set<ShardId> usedShards; + const std::vector<ClusterStatistics::ShardStatistics> shardStats = + uassertStatusOK(_clusterStats->getStats(opCtx.get())); + + stdx::unordered_set<ShardId> availableShards; + std::transform( + shardStats.begin(), + shardStats.end(), + std::inserter(availableShards, availableShards.end()), + [](const ClusterStatistics::ShardStatistics& shardStatistics) -> ShardId { + return shardStatistics.shardId; + }); const auto chunksToDefragment = - _defragmentationPolicy->selectChunksToMove(opCtx.get(), &usedShards); + _defragmentationPolicy->selectChunksToMove(opCtx.get(), &availableShards); - const auto chunksToRebalance = uassertStatusOK( - _chunkSelectionPolicy->selectChunksToMove(opCtx.get(), &usedShards)); + const auto chunksToRebalance = + uassertStatusOK(_chunkSelectionPolicy->selectChunksToMove( + opCtx.get(), shardStats, &availableShards)); if (chunksToRebalance.empty() && chunksToDefragment.empty()) { LOGV2_DEBUG(21862, 1, "No need to move any chunk"); |