From 9d9162ca356932fb8c9ec0322f3a771bbbcc47f5 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Fri, 7 Jun 2019 00:25:01 -0700 Subject: ec.balance: collect dc rack info --- weed/shell/command_ec_common.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'weed/shell/command_ec_common.go') diff --git a/weed/shell/command_ec_common.go b/weed/shell/command_ec_common.go index 041715908..7787f4e9f 100644 --- a/weed/shell/command_ec_common.go +++ b/weed/shell/command_ec_common.go @@ -98,11 +98,11 @@ func oneServerCopyAndMountEcShardsFromSource(ctx context.Context, grpcDialOption return } -func eachDataNode(topo *master_pb.TopologyInfo, fn func(*master_pb.DataNodeInfo)) { +func eachDataNode(topo *master_pb.TopologyInfo, fn func(dc, rack string, dn *master_pb.DataNodeInfo)) { for _, dc := range topo.DataCenterInfos { for _, rack := range dc.RackInfos { for _, dn := range rack.DataNodeInfos { - fn(dn) + fn(dc.Id, rack.Id, dn) } } } @@ -128,6 +128,8 @@ func countFreeShardSlots(dn *master_pb.DataNodeInfo) (count int) { type EcNode struct { info *master_pb.DataNodeInfo + dc string + rack string freeEcSlot int } @@ -144,10 +146,12 @@ func collectEcNodes(ctx context.Context, commandEnv *CommandEnv) (ecNodes []*EcN } // find out all volume servers with one slot left. - eachDataNode(resp.TopologyInfo, func(dn *master_pb.DataNodeInfo) { + eachDataNode(resp.TopologyInfo, func(dc, rack string, dn *master_pb.DataNodeInfo) { if freeEcSlots := countFreeShardSlots(dn); freeEcSlots > 0 { ecNodes = append(ecNodes, &EcNode{ info: dn, + dc: dc, + rack: rack, freeEcSlot: int(freeEcSlots), }) totalFreeEcSlots += freeEcSlots -- cgit v1.2.3