in pkg/trimaran/lowriskovercommitment/lowriskovercommitment.go [100:138]
func (pl *LowRiskOverCommitment) Score(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodeName string) (int64, *framework.Status) {
klog.V(6).InfoS("Score: Calculating score", "pod", klog.KObj(pod), "nodeName", nodeName)
score := framework.MinNodeScore
defer func() {
klog.V(6).InfoS("Calculating totalScore", "pod", klog.KObj(pod), "nodeName", nodeName, "totalScore", score)
}()
// get pod requests and limits
podResources, err := getPreScoreState(cycleState)
if err != nil {
// calculate pod requests and limits, if missing
klog.V(6).InfoS(err.Error()+"; recalculating", "pod", klog.KObj(pod))
podResources = CreatePodResourcesStateData(pod)
}
// exclude scoring for best effort pods; this plugin is not concerned about best effort pods
podRequests := &podResources.podRequests
podLimits := &podResources.podLimits
if podRequests.MilliCPU == 0 && podRequests.Memory == 0 &&
podLimits.MilliCPU == 0 && podLimits.Memory == 0 {
klog.V(6).InfoS("Skipping scoring best effort pod; using minimum score", "nodeName", nodeName, "pod", klog.KObj(pod))
return score, nil
}
// get node info
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
}
// calculate score
totalScore := pl.computeRank(metrics, nodeInfo, pod, podRequests, podLimits) * float64(framework.MaxNodeScore)
score = int64(math.Round(totalScore))
return score, framework.NewStatus(framework.Success, "")
}