mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-09-18 20:40:54 +02:00
70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
package ec_repair_test
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/master_pb"
|
|
)
|
|
|
|
type nodeSpec struct {
|
|
id string
|
|
address string
|
|
diskType string
|
|
diskID uint32
|
|
ecShards []*master_pb.VolumeEcShardInformationMessage
|
|
}
|
|
|
|
func buildTopology(nodes []nodeSpec) *master_pb.TopologyInfo {
|
|
dataNodes := make([]*master_pb.DataNodeInfo, 0, len(nodes))
|
|
for _, node := range nodes {
|
|
diskInfo := &master_pb.DiskInfo{
|
|
DiskId: node.diskID,
|
|
MaxVolumeCount: 100,
|
|
VolumeCount: 10,
|
|
EcShardInfos: node.ecShards,
|
|
}
|
|
dataNodes = append(dataNodes, &master_pb.DataNodeInfo{
|
|
Id: node.id,
|
|
Address: node.address,
|
|
DiskInfos: map[string]*master_pb.DiskInfo{node.diskType: diskInfo},
|
|
})
|
|
}
|
|
return &master_pb.TopologyInfo{
|
|
DataCenterInfos: []*master_pb.DataCenterInfo{
|
|
{
|
|
Id: "dc1",
|
|
RackInfos: []*master_pb.RackInfo{
|
|
{
|
|
Id: "rack1",
|
|
DataNodeInfos: dataNodes,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func buildEcShardInfo(volumeID uint32, collection, diskType string, diskID uint32, shardSizes map[uint32]int64) *master_pb.VolumeEcShardInformationMessage {
|
|
shardIDs := make([]int, 0, len(shardSizes))
|
|
for shardID := range shardSizes {
|
|
shardIDs = append(shardIDs, int(shardID))
|
|
}
|
|
sort.Ints(shardIDs)
|
|
|
|
var bits uint32
|
|
sizes := make([]int64, 0, len(shardIDs))
|
|
for _, shardID := range shardIDs {
|
|
bits |= (1 << shardID)
|
|
sizes = append(sizes, shardSizes[uint32(shardID)])
|
|
}
|
|
|
|
return &master_pb.VolumeEcShardInformationMessage{
|
|
Id: volumeID,
|
|
Collection: collection,
|
|
EcIndexBits: bits,
|
|
DiskType: diskType,
|
|
DiskId: diskID,
|
|
ShardSizes: sizes,
|
|
}
|
|
}
|