From 926cfea3dca8f836e5133b2e56007fdec9e13b34 Mon Sep 17 00:00:00 2001 From: Lisandro Pin Date: Fri, 13 Dec 2024 15:05:32 +0100 Subject: [PATCH] Parallelize EC shards balancing across racks. (#6352) --- weed/shell/command_ec_common.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/weed/shell/command_ec_common.go b/weed/shell/command_ec_common.go index c38518664..fff3db429 100644 --- a/weed/shell/command_ec_common.go +++ b/weed/shell/command_ec_common.go @@ -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 {