in pkg/trimaran/loadvariationriskbalancing/loadvariationriskbalancing.go [81:121]
func (pl *LoadVariationRiskBalancing) Score(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodeName string) (int64, *framework.Status) {
klog.V(6).InfoS("Calculating score", "pod", klog.KObj(pod), "nodeName", nodeName)
score := framework.MinNodeScore
nodeInfo, err := pl.handle.SnapshotSharedLister().NodeInfos().Get(nodeName)
if err != nil {
return score, framework.NewStatus(framework.Error, fmt.Sprintf("getting node %q from Snapshot: %v", nodeName, err))
}
// get node metrics
metrics, _ := pl.collector.GetNodeMetrics(nodeName)
if metrics == nil {
klog.InfoS("Failed to get metrics for node; using minimum score", "nodeName", nodeName)
return score, nil
}
podRequest := trimaran.GetResourceRequested(pod)
node := nodeInfo.Node()
// calculate CPU score
var cpuScore float64 = 0
cpuStats, cpuOK := trimaran.CreateResourceStats(metrics, node, podRequest, v1.ResourceCPU, watcher.CPU)
if cpuOK {
cpuScore = computeScore(cpuStats, pl.args.SafeVarianceMargin, pl.args.SafeVarianceSensitivity)
}
klog.V(6).InfoS("Calculating CPUScore", "pod", klog.KObj(pod), "nodeName", nodeName, "cpuScore", cpuScore)
// calculate Memory score
var memoryScore float64 = 0
memoryStats, memoryOK := trimaran.CreateResourceStats(metrics, node, podRequest, v1.ResourceMemory, watcher.Memory)
if memoryOK {
memoryScore = computeScore(memoryStats, pl.args.SafeVarianceMargin, pl.args.SafeVarianceSensitivity)
}
klog.V(6).InfoS("Calculating MemoryScore", "pod", klog.KObj(pod), "nodeName", nodeName, "memoryScore", memoryScore)
// calculate total score
var totalScore float64 = 0
if memoryOK && cpuOK {
totalScore = math.Min(memoryScore, cpuScore)
} else {
totalScore = math.Max(memoryScore, cpuScore)
}
score = int64(math.Round(totalScore))
klog.V(6).InfoS("Calculating totalScore", "pod", klog.KObj(pod), "nodeName", nodeName, "totalScore", score)
return score, framework.NewStatus(framework.Success, "")
}