Browse Source

test checking ec distribution

pull/2652/head
chrislu 3 years ago
parent
commit
13f6ec1c4e
  1. 30
      weed/shell/command_ec_encode_test.go
  2. 3
      weed/shell/command_volume_list_test.go

30
weed/shell/command_ec_encode_test.go

@ -0,0 +1,30 @@
package shell
import (
"fmt"
"github.com/chrislusf/seaweedfs/weed/storage/erasure_coding"
"testing"
)
func TestEcDistribution(t *testing.T) {
topologyInfo := parseOutput(topoData)
// find out all volume servers with one slot left.
ecNodes, totalFreeEcSlots := collectEcVolumeServersByDc(topologyInfo, "")
sortEcNodesByFreeslotsDecending(ecNodes)
if totalFreeEcSlots < erasure_coding.TotalShardsCount {
println("not enough free ec shard slots", totalFreeEcSlots)
}
allocatedDataNodes := ecNodes
if len(allocatedDataNodes) > erasure_coding.TotalShardsCount {
allocatedDataNodes = allocatedDataNodes[:erasure_coding.TotalShardsCount]
}
for _, dn := range allocatedDataNodes {
fmt.Printf("info %+v %+v\n", dn.info, dn)
}
}

3
weed/shell/command_volume_list_test.go

@ -65,11 +65,14 @@ func parseOutput(output string) *master_pb.TopologyInfo {
case "Disk": case "Disk":
if disk == nil { if disk == nil {
diskType := parts[1][:strings.Index(parts[1], "(")] diskType := parts[1][:strings.Index(parts[1], "(")]
volumeCountStr := parts[1][strings.Index(parts[1], ":")+1 : strings.Index(parts[1], "/")]
maxVolumeCountStr := parts[1][strings.Index(parts[1], "/")+1:] maxVolumeCountStr := parts[1][strings.Index(parts[1], "/")+1:]
maxVolumeCount, _ := strconv.Atoi(maxVolumeCountStr) maxVolumeCount, _ := strconv.Atoi(maxVolumeCountStr)
volumeCount, _ := strconv.Atoi(volumeCountStr)
disk = &master_pb.DiskInfo{ disk = &master_pb.DiskInfo{
Type: diskType, Type: diskType,
MaxVolumeCount: int64(maxVolumeCount), MaxVolumeCount: int64(maxVolumeCount),
VolumeCount: int64(volumeCount),
} }
dn.DiskInfos[types.ToDiskType(diskType).String()] = disk dn.DiskInfos[types.ToDiskType(diskType).String()] = disk
} else { } else {

Loading…
Cancel
Save