func()

in pkg/noderesourcetopology/score.go [63:94]


func (tm *TopologyMatch) Score(ctx context.Context, state *framework.CycleState, pod *v1.Pod, nodeName string) (int64, *framework.Status) {
	// the scheduler framework will add the node/name key/value pair
	lh := klog.FromContext(ctx).WithValues(logging.KeyPod, klog.KObj(pod), logging.KeyPodUID, logging.PodUID(pod))

	lh.V(4).Info(logging.FlowBegin)
	defer lh.V(4).Info(logging.FlowEnd)

	lh.V(6).Info("scoring node")
	// if it's a non-guaranteed pod, every node is considered to be a good fit
	if v1qos.GetPodQOS(pod) != v1.PodQOSGuaranteed {
		return framework.MaxNodeScore, nil
	}

	nodeTopology, info := tm.nrtCache.GetCachedNRTCopy(ctx, nodeName, pod)
	lh = lh.WithValues(logging.KeyGeneration, info.Generation)
	if !info.Fresh {
		lh.V(4).Info("noderesourcetopology is not valid for node")
		return 0, nil
	}
	if nodeTopology == nil {
		lh.V(5).Info("noderesourcetopology was not found for node")
		return 0, nil
	}

	lh.V(6).Info("found object", "noderesourcetopology", stringify.NodeResourceTopologyResources(nodeTopology))

	handler := tm.scoringHandlerFromTopologyManagerConfig(nodeconfig.TopologyManagerFromNodeResourceTopology(lh, nodeTopology))
	if handler == nil {
		return 0, nil
	}
	return handler(lh, pod, nodeTopology.Zones)
}