summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/balancer/balancer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/s/balancer/balancer.cpp')
-rw-r--r--src/mongo/db/s/balancer/balancer.cpp19
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");