mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Only run Prioritize() for extenders with prioritizeVerb configured
This commit is contained in:
		@@ -422,7 +422,7 @@ func (sched *Scheduler) schedulePod(ctx context.Context, fwk framework.Framework
 | 
				
			|||||||
		}, nil
 | 
							}, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	priorityList, err := prioritizeNodes(ctx, sched.Extenders, fwk, state, pod, feasibleNodes)
 | 
						priorityList, err := sched.prioritizeNodes(ctx, fwk, state, pod, feasibleNodes)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return result, err
 | 
							return result, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -721,9 +721,8 @@ func findNodesThatPassExtenders(ctx context.Context, extenders []framework.Exten
 | 
				
			|||||||
// The scores from each plugin are added together to make the score for that node, then
 | 
					// The scores from each plugin are added together to make the score for that node, then
 | 
				
			||||||
// any extenders are run as well.
 | 
					// any extenders are run as well.
 | 
				
			||||||
// All scores are finally combined (added) to get the total weighted scores of all nodes
 | 
					// All scores are finally combined (added) to get the total weighted scores of all nodes
 | 
				
			||||||
func prioritizeNodes(
 | 
					func (sched *Scheduler) prioritizeNodes(
 | 
				
			||||||
	ctx context.Context,
 | 
						ctx context.Context,
 | 
				
			||||||
	extenders []framework.Extender,
 | 
					 | 
				
			||||||
	fwk framework.Framework,
 | 
						fwk framework.Framework,
 | 
				
			||||||
	state *framework.CycleState,
 | 
						state *framework.CycleState,
 | 
				
			||||||
	pod *v1.Pod,
 | 
						pod *v1.Pod,
 | 
				
			||||||
@@ -732,7 +731,7 @@ func prioritizeNodes(
 | 
				
			|||||||
	logger := klog.FromContext(ctx)
 | 
						logger := klog.FromContext(ctx)
 | 
				
			||||||
	// If no priority configs are provided, then all nodes will have a score of one.
 | 
						// If no priority configs are provided, then all nodes will have a score of one.
 | 
				
			||||||
	// This is required to generate the priority list in the required format
 | 
						// This is required to generate the priority list in the required format
 | 
				
			||||||
	if len(extenders) == 0 && !fwk.HasScorePlugins() {
 | 
						if !sched.hasScoring(fwk) {
 | 
				
			||||||
		result := make([]framework.NodePluginScores, 0, len(nodes))
 | 
							result := make([]framework.NodePluginScores, 0, len(nodes))
 | 
				
			||||||
		for i := range nodes {
 | 
							for i := range nodes {
 | 
				
			||||||
			result = append(result, framework.NodePluginScores{
 | 
								result = append(result, framework.NodePluginScores{
 | 
				
			||||||
@@ -765,14 +764,17 @@ func prioritizeNodes(
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if len(extenders) != 0 && nodes != nil {
 | 
						if len(sched.Extenders) != 0 && nodes != nil {
 | 
				
			||||||
		// allNodeExtendersScores has all extenders scores for all nodes.
 | 
							// allNodeExtendersScores has all extenders scores for all nodes.
 | 
				
			||||||
		// It is keyed with node name.
 | 
							// It is keyed with node name.
 | 
				
			||||||
		allNodeExtendersScores := make(map[string]*framework.NodePluginScores, len(nodes))
 | 
							allNodeExtendersScores := make(map[string]*framework.NodePluginScores, len(nodes))
 | 
				
			||||||
		var mu sync.Mutex
 | 
							var mu sync.Mutex
 | 
				
			||||||
		var wg sync.WaitGroup
 | 
							var wg sync.WaitGroup
 | 
				
			||||||
		for i := range extenders {
 | 
							for i := range sched.Extenders {
 | 
				
			||||||
			if !extenders[i].IsInterested(pod) {
 | 
								if !sched.Extenders[i].IsInterested(pod) {
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if !sched.Extenders[i].IsPrioritizer() {
 | 
				
			||||||
				continue
 | 
									continue
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			wg.Add(1)
 | 
								wg.Add(1)
 | 
				
			||||||
@@ -782,10 +784,10 @@ func prioritizeNodes(
 | 
				
			|||||||
					metrics.Goroutines.WithLabelValues(metrics.PrioritizingExtender).Dec()
 | 
										metrics.Goroutines.WithLabelValues(metrics.PrioritizingExtender).Dec()
 | 
				
			||||||
					wg.Done()
 | 
										wg.Done()
 | 
				
			||||||
				}()
 | 
									}()
 | 
				
			||||||
				prioritizedList, weight, err := extenders[extIndex].Prioritize(pod, nodes)
 | 
									prioritizedList, weight, err := sched.Extenders[extIndex].Prioritize(pod, nodes)
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					// Prioritization errors from extender can be ignored, let k8s/other extenders determine the priorities
 | 
										// Prioritization errors from extender can be ignored, let k8s/other extenders determine the priorities
 | 
				
			||||||
					logger.V(5).Info("Failed to run extender's priority function. No score given by this extender.", "error", err, "pod", klog.KObj(pod), "extender", extenders[extIndex].Name())
 | 
										logger.V(5).Info("Failed to run extender's priority function. No score given by this extender.", "error", err, "pod", klog.KObj(pod), "extender", sched.Extenders[extIndex].Name())
 | 
				
			||||||
					return
 | 
										return
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				mu.Lock()
 | 
									mu.Lock()
 | 
				
			||||||
@@ -794,7 +796,7 @@ func prioritizeNodes(
 | 
				
			|||||||
					nodename := (*prioritizedList)[i].Host
 | 
										nodename := (*prioritizedList)[i].Host
 | 
				
			||||||
					score := (*prioritizedList)[i].Score
 | 
										score := (*prioritizedList)[i].Score
 | 
				
			||||||
					if loggerVTen.Enabled() {
 | 
										if loggerVTen.Enabled() {
 | 
				
			||||||
						loggerVTen.Info("Extender scored node for pod", "pod", klog.KObj(pod), "extender", extenders[extIndex].Name(), "node", nodename, "score", score)
 | 
											loggerVTen.Info("Extender scored node for pod", "pod", klog.KObj(pod), "extender", sched.Extenders[extIndex].Name(), "node", nodename, "score", score)
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					// MaxExtenderPriority may diverge from the max priority used in the scheduler and defined by MaxNodeScore,
 | 
										// MaxExtenderPriority may diverge from the max priority used in the scheduler and defined by MaxNodeScore,
 | 
				
			||||||
@@ -804,11 +806,11 @@ func prioritizeNodes(
 | 
				
			|||||||
					if allNodeExtendersScores[nodename] == nil {
 | 
										if allNodeExtendersScores[nodename] == nil {
 | 
				
			||||||
						allNodeExtendersScores[nodename] = &framework.NodePluginScores{
 | 
											allNodeExtendersScores[nodename] = &framework.NodePluginScores{
 | 
				
			||||||
							Name:   nodename,
 | 
												Name:   nodename,
 | 
				
			||||||
							Scores: make([]framework.PluginScore, 0, len(extenders)),
 | 
												Scores: make([]framework.PluginScore, 0, len(sched.Extenders)),
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					allNodeExtendersScores[nodename].Scores = append(allNodeExtendersScores[nodename].Scores, framework.PluginScore{
 | 
										allNodeExtendersScores[nodename].Scores = append(allNodeExtendersScores[nodename].Scores, framework.PluginScore{
 | 
				
			||||||
						Name:  extenders[extIndex].Name(),
 | 
											Name:  sched.Extenders[extIndex].Name(),
 | 
				
			||||||
						Score: finalscore,
 | 
											Score: finalscore,
 | 
				
			||||||
					})
 | 
										})
 | 
				
			||||||
					allNodeExtendersScores[nodename].TotalScore += finalscore
 | 
										allNodeExtendersScores[nodename].TotalScore += finalscore
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2743,7 +2743,7 @@ func TestZeroRequest(t *testing.T) {
 | 
				
			|||||||
				t.Fatalf("error filtering nodes: %+v", err)
 | 
									t.Fatalf("error filtering nodes: %+v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			fwk.RunPreScorePlugins(ctx, state, test.pod, tf.BuildNodeInfos(test.nodes))
 | 
								fwk.RunPreScorePlugins(ctx, state, test.pod, tf.BuildNodeInfos(test.nodes))
 | 
				
			||||||
			list, err := prioritizeNodes(ctx, nil, fwk, state, test.pod, tf.BuildNodeInfos(test.nodes))
 | 
								list, err := sched.prioritizeNodes(ctx, fwk, state, test.pod, tf.BuildNodeInfos(test.nodes))
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("unexpected error: %v", err)
 | 
									t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -3139,7 +3139,10 @@ func Test_prioritizeNodes(t *testing.T) {
 | 
				
			|||||||
			for ii := range test.extenders {
 | 
								for ii := range test.extenders {
 | 
				
			||||||
				extenders = append(extenders, &test.extenders[ii])
 | 
									extenders = append(extenders, &test.extenders[ii])
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			nodesscores, err := prioritizeNodes(ctx, extenders, fwk, state, test.pod, tf.BuildNodeInfos(test.nodes))
 | 
								sched := &Scheduler{
 | 
				
			||||||
 | 
									Extenders: extenders,
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								nodesscores, err := sched.prioritizeNodes(ctx, fwk, state, test.pod, tf.BuildNodeInfos(test.nodes))
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("unexpected error: %v", err)
 | 
									t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user