Parallelize EC shards balancing across racks. (#6352)

This commit is contained in:
Lisandro Pin 2024-12-13 15:05:32 +01:00 committed by GitHub
parent b81def5e5c
commit 926cfea3dc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -679,17 +679,18 @@ func (ecb *ecBalancer) doDeduplicateEcShards(collection string, vid needle.Volum
return nil
}
// TODO: enable parallelization
func (ecb *ecBalancer) balanceEcShardsAcrossRacks(collection string) error {
// collect vid => []ecNode, since previous steps can change the locations
vidLocations := ecb.collectVolumeIdToEcNodes(collection)
// spread the ec shards evenly
ecb.wgInit()
for vid, locations := range vidLocations {
if err := ecb.doBalanceEcShardsAcrossRacks(collection, vid, locations); err != nil {
return err
}
ecb.wgAdd(func() error {
return ecb.doBalanceEcShardsAcrossRacks(collection, vid, locations)
})
}
return nil
return ecb.wgWait()
}
func countShardsByRack(vid needle.VolumeId, locations []*EcNode) map[string]int {