chore:(weed/worker/tasks/erasure_coding): Prune Unused and Untested Functions (#8761)
* chore(weed/worker/tasks/erasure_coding): prune unused findVolumeReplicas() * chore(weed/worker/tasks/erasure_coding): prune unused isDiskSuitableForEC() * chore(weed/worker/tasks/erasure_coding): prune unused selectBestECDestinations() * chore(weed/worker/tasks/erasure_coding): prune unused candidatesToDiskInfos()
This commit is contained in:
@@ -786,40 +786,6 @@ func createECTaskParams(multiPlan *topology.MultiDestinationPlan) *worker_pb.Era
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// selectBestECDestinations selects multiple disks for EC shard placement with diversity
|
|
||||||
// Uses the consolidated placement package for proper rack/server/disk spreading
|
|
||||||
func selectBestECDestinations(disks []*topology.DiskInfo, sourceRack, sourceDC string, shardsNeeded int) []*topology.DiskInfo {
|
|
||||||
if len(disks) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert topology.DiskInfo to placement.DiskCandidate
|
|
||||||
candidates := diskInfosToCandidates(disks)
|
|
||||||
if len(candidates) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Configure placement for EC shards
|
|
||||||
config := placement.PlacementRequest{
|
|
||||||
ShardsNeeded: shardsNeeded,
|
|
||||||
MaxShardsPerServer: 0, // No hard limit, but prefer spreading
|
|
||||||
MaxShardsPerRack: 0, // No hard limit, but prefer spreading
|
|
||||||
MaxTaskLoad: topology.MaxTaskLoadForECPlacement,
|
|
||||||
PreferDifferentServers: true,
|
|
||||||
PreferDifferentRacks: true,
|
|
||||||
}
|
|
||||||
|
|
||||||
// Use the shared placement algorithm
|
|
||||||
result, err := placement.SelectDestinations(candidates, config)
|
|
||||||
if err != nil {
|
|
||||||
glog.V(2).Infof("EC placement failed: %v", err)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert back to topology.DiskInfo
|
|
||||||
return candidatesToDiskInfos(result.SelectedDisks, disks)
|
|
||||||
}
|
|
||||||
|
|
||||||
// diskInfosToCandidates converts topology.DiskInfo slice to placement.DiskCandidate slice
|
// diskInfosToCandidates converts topology.DiskInfo slice to placement.DiskCandidate slice
|
||||||
func diskInfosToCandidates(disks []*topology.DiskInfo) []*placement.DiskCandidate {
|
func diskInfosToCandidates(disks []*topology.DiskInfo) []*placement.DiskCandidate {
|
||||||
var candidates []*placement.DiskCandidate
|
var candidates []*placement.DiskCandidate
|
||||||
@@ -860,25 +826,6 @@ func diskInfosToCandidates(disks []*topology.DiskInfo) []*placement.DiskCandidat
|
|||||||
return candidates
|
return candidates
|
||||||
}
|
}
|
||||||
|
|
||||||
// candidatesToDiskInfos converts placement results back to topology.DiskInfo
|
|
||||||
func candidatesToDiskInfos(candidates []*placement.DiskCandidate, originalDisks []*topology.DiskInfo) []*topology.DiskInfo {
|
|
||||||
// Create a map for quick lookup
|
|
||||||
diskMap := make(map[string]*topology.DiskInfo)
|
|
||||||
for _, disk := range originalDisks {
|
|
||||||
key := fmt.Sprintf("%s:%d", disk.NodeID, disk.DiskID)
|
|
||||||
diskMap[key] = disk
|
|
||||||
}
|
|
||||||
|
|
||||||
var result []*topology.DiskInfo
|
|
||||||
for _, candidate := range candidates {
|
|
||||||
key := fmt.Sprintf("%s:%d", candidate.NodeID, candidate.DiskID)
|
|
||||||
if disk, ok := diskMap[key]; ok {
|
|
||||||
result = append(result, disk)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// calculateECScoreCandidate calculates placement score for EC operations.
|
// calculateECScoreCandidate calculates placement score for EC operations.
|
||||||
// Used for logging and plan metadata.
|
// Used for logging and plan metadata.
|
||||||
func calculateECScoreCandidate(disk *placement.DiskCandidate, sourceRack, sourceDC string) float64 {
|
func calculateECScoreCandidate(disk *placement.DiskCandidate, sourceRack, sourceDC string) float64 {
|
||||||
@@ -900,22 +847,6 @@ func calculateECScoreCandidate(disk *placement.DiskCandidate, sourceRack, source
|
|||||||
return score
|
return score
|
||||||
}
|
}
|
||||||
|
|
||||||
// isDiskSuitableForEC checks if a disk is suitable for EC placement
|
|
||||||
// Note: This is kept for backward compatibility but the placement package
|
|
||||||
// handles filtering internally
|
|
||||||
func isDiskSuitableForEC(disk *topology.DiskInfo) bool {
|
|
||||||
if disk.DiskInfo == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if disk is not overloaded with tasks
|
|
||||||
if disk.LoadCount > topology.MaxTaskLoadForECPlacement {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// findVolumeReplicaLocations finds all replica locations (server + disk) for the specified volume
|
// findVolumeReplicaLocations finds all replica locations (server + disk) for the specified volume
|
||||||
// Uses O(1) indexed lookup for optimal performance on large clusters.
|
// Uses O(1) indexed lookup for optimal performance on large clusters.
|
||||||
func findVolumeReplicaLocations(activeTopology *topology.ActiveTopology, volumeID uint32, collection string) []topology.VolumeReplica {
|
func findVolumeReplicaLocations(activeTopology *topology.ActiveTopology, volumeID uint32, collection string) []topology.VolumeReplica {
|
||||||
@@ -933,35 +864,3 @@ func findExistingECShards(activeTopology *topology.ActiveTopology, volumeID uint
|
|||||||
}
|
}
|
||||||
return activeTopology.GetECShardLocations(volumeID, collection)
|
return activeTopology.GetECShardLocations(volumeID, collection)
|
||||||
}
|
}
|
||||||
|
|
||||||
// findVolumeReplicas finds all servers that have replicas of the specified volume
|
|
||||||
func findVolumeReplicas(activeTopology *topology.ActiveTopology, volumeID uint32, collection string) []string {
|
|
||||||
if activeTopology == nil {
|
|
||||||
return []string{}
|
|
||||||
}
|
|
||||||
|
|
||||||
topologyInfo := activeTopology.GetTopologyInfo()
|
|
||||||
if topologyInfo == nil {
|
|
||||||
return []string{}
|
|
||||||
}
|
|
||||||
|
|
||||||
var replicaServers []string
|
|
||||||
|
|
||||||
// Iterate through all nodes to find volume replicas
|
|
||||||
for _, dc := range topologyInfo.DataCenterInfos {
|
|
||||||
for _, rack := range dc.RackInfos {
|
|
||||||
for _, nodeInfo := range rack.DataNodeInfos {
|
|
||||||
for _, diskInfo := range nodeInfo.DiskInfos {
|
|
||||||
for _, volumeInfo := range diskInfo.VolumeInfos {
|
|
||||||
if volumeInfo.Id == volumeID && volumeInfo.Collection == collection {
|
|
||||||
replicaServers = append(replicaServers, nodeInfo.Id)
|
|
||||||
break // Found volume on this node, move to next node
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return replicaServers
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user