avoid double counting ec slot

addressing issue found in https://github.com/chrislusf/seaweedfs/issues/1111

The ec slots are already counted on the server side.
This commit is contained in:
Chris Lu 2019-11-12 09:33:51 -08:00
parent 5d61b67e62
commit 717ec47fa2

View file

@ -156,7 +156,7 @@ func countShards(ecShardInfos []*master_pb.VolumeEcShardInformationMessage) (cou
} }
func countFreeShardSlots(dn *master_pb.DataNodeInfo) (count int) { func countFreeShardSlots(dn *master_pb.DataNodeInfo) (count int) {
return int(dn.FreeVolumeCount)*erasure_coding.DataShardsCount - countShards(dn.EcShardInfos) return int(dn.MaxVolumeCount-dn.ActiveVolumeCount)*erasure_coding.DataShardsCount - countShards(dn.EcShardInfos)
} }
type RackId string type RackId string
@ -191,15 +191,15 @@ func collectEcNodes(ctx context.Context, commandEnv *CommandEnv, selectedDataCen
if selectedDataCenter != "" && selectedDataCenter != dc { if selectedDataCenter != "" && selectedDataCenter != dc {
return return
} }
if freeEcSlots := countFreeShardSlots(dn); freeEcSlots > 0 {
ecNodes = append(ecNodes, &EcNode{ freeEcSlots := countFreeShardSlots(dn)
info: dn, ecNodes = append(ecNodes, &EcNode{
dc: dc, info: dn,
rack: rack, dc: dc,
freeEcSlot: int(freeEcSlots), rack: rack,
}) freeEcSlot: int(freeEcSlots),
totalFreeEcSlots += freeEcSlots })
} totalFreeEcSlots += freeEcSlots
}) })
sortEcNodes(ecNodes) sortEcNodes(ecNodes)