mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Merge pull request #80533 from alculquicondor/refactor/find_nodes
Query nodes in Schedule only when there are no predicates
This commit is contained in:
		@@ -195,11 +195,8 @@ func (g *genericScheduler) Schedule(pod *v1.Pod, nodeLister algorithm.NodeLister
 | 
			
		||||
		return result, prefilterStatus.AsError()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	nodes := nodeLister.ListNodes()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return result, err
 | 
			
		||||
	}
 | 
			
		||||
	if len(nodes) == 0 {
 | 
			
		||||
	numNodes := g.cache.NodeTree().NumNodes()
 | 
			
		||||
	if numNodes == 0 {
 | 
			
		||||
		return result, ErrNoNodesAvailable
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -209,7 +206,7 @@ func (g *genericScheduler) Schedule(pod *v1.Pod, nodeLister algorithm.NodeLister
 | 
			
		||||
 | 
			
		||||
	trace.Step("Basic checks done")
 | 
			
		||||
	startPredicateEvalTime := time.Now()
 | 
			
		||||
	filteredNodes, failedPredicateMap, err := g.findNodesThatFit(pluginContext, pod, nodes)
 | 
			
		||||
	filteredNodes, failedPredicateMap, err := g.findNodesThatFit(pluginContext, pod, nodeLister)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return result, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -217,7 +214,7 @@ func (g *genericScheduler) Schedule(pod *v1.Pod, nodeLister algorithm.NodeLister
 | 
			
		||||
	if len(filteredNodes) == 0 {
 | 
			
		||||
		return result, &FitError{
 | 
			
		||||
			Pod:              pod,
 | 
			
		||||
			NumAllNodes:      len(nodes),
 | 
			
		||||
			NumAllNodes:      numNodes,
 | 
			
		||||
			FailedPredicates: failedPredicateMap,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -452,12 +449,12 @@ func (g *genericScheduler) numFeasibleNodesToFind(numAllNodes int32) (numNodes i
 | 
			
		||||
 | 
			
		||||
// Filters the nodes to find the ones that fit based on the given predicate functions
 | 
			
		||||
// Each node is passed through the predicate functions to determine if it is a fit
 | 
			
		||||
func (g *genericScheduler) findNodesThatFit(pluginContext *framework.PluginContext, pod *v1.Pod, nodes []*v1.Node) ([]*v1.Node, FailedPredicateMap, error) {
 | 
			
		||||
func (g *genericScheduler) findNodesThatFit(pluginContext *framework.PluginContext, pod *v1.Pod, nodeLister algorithm.NodeLister) ([]*v1.Node, FailedPredicateMap, error) {
 | 
			
		||||
	var filtered []*v1.Node
 | 
			
		||||
	failedPredicateMap := FailedPredicateMap{}
 | 
			
		||||
 | 
			
		||||
	if len(g.predicates) == 0 {
 | 
			
		||||
		filtered = nodes
 | 
			
		||||
		filtered = nodeLister.ListNodes()
 | 
			
		||||
	} else {
 | 
			
		||||
		allNodes := int32(g.cache.NodeTree().NumNodes())
 | 
			
		||||
		numNodesToFind := g.numFeasibleNodesToFind(allNodes)
 | 
			
		||||
 
 | 
			
		||||
@@ -613,7 +613,7 @@ func TestFindFitAllError(t *testing.T) {
 | 
			
		||||
	nodes := makeNodeList([]string{"3", "2", "1"})
 | 
			
		||||
	scheduler := makeScheduler(predicates, nodes)
 | 
			
		||||
 | 
			
		||||
	_, predicateMap, err := scheduler.findNodesThatFit(nil, &v1.Pod{}, nodes)
 | 
			
		||||
	_, predicateMap, err := scheduler.findNodesThatFit(nil, &v1.Pod{}, schedulertesting.FakeNodeLister(nodes))
 | 
			
		||||
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Errorf("unexpected error: %v", err)
 | 
			
		||||
@@ -643,7 +643,7 @@ func TestFindFitSomeError(t *testing.T) {
 | 
			
		||||
	scheduler := makeScheduler(predicates, nodes)
 | 
			
		||||
 | 
			
		||||
	pod := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "1", UID: types.UID("1")}}
 | 
			
		||||
	_, predicateMap, err := scheduler.findNodesThatFit(nil, pod, nodes)
 | 
			
		||||
	_, predicateMap, err := scheduler.findNodesThatFit(nil, pod, schedulertesting.FakeNodeLister(nodes))
 | 
			
		||||
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Errorf("unexpected error: %v", err)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user