diff --git a/pkg/scheduler/schedule_one.go b/pkg/scheduler/schedule_one.go index 753eab6c14e..c3cc2ea7306 100644 --- a/pkg/scheduler/schedule_one.go +++ b/pkg/scheduler/schedule_one.go @@ -420,7 +420,7 @@ func (sched *Scheduler) schedulePod(ctx context.Context, fwk framework.Framework }, nil } - priorityList, err := prioritizeNodes(ctx, sched.Extenders, fwk, state, pod, feasibleNodes) + priorityList, err := sched.prioritizeNodes(ctx, fwk, state, pod, feasibleNodes) if err != nil { return result, err } @@ -704,9 +704,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 // any extenders are run as well. // All scores are finally combined (added) to get the total weighted scores of all nodes -func prioritizeNodes( +func (sched *Scheduler) prioritizeNodes( ctx context.Context, - extenders []framework.Extender, fwk framework.Framework, state *framework.CycleState, pod *v1.Pod, @@ -715,7 +714,7 @@ func prioritizeNodes( logger := klog.FromContext(ctx) // 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 - if len(extenders) == 0 && !fwk.HasScorePlugins() { + if !sched.hasScoring(fwk) { result := make([]framework.NodePluginScores, 0, len(nodes)) for i := range nodes { result = append(result, framework.NodePluginScores{ @@ -748,14 +747,17 @@ func prioritizeNodes( } } - if len(extenders) != 0 && nodes != nil { + if len(sched.Extenders) != 0 && nodes != nil { // allNodeExtendersScores has all extenders scores for all nodes. // It is keyed with node name. allNodeExtendersScores := make(map[string]*framework.NodePluginScores, len(nodes)) var mu sync.Mutex var wg sync.WaitGroup - for i := range extenders { - if !extenders[i].IsInterested(pod) { + for i := range sched.Extenders { + if !sched.Extenders[i].IsInterested(pod) { + continue + } + if !sched.Extenders[i].IsPrioritizer() { continue } wg.Add(1) @@ -765,10 +767,10 @@ func prioritizeNodes( metrics.Goroutines.WithLabelValues(metrics.PrioritizingExtender).Dec() wg.Done() }() - prioritizedList, weight, err := extenders[extIndex].Prioritize(pod, nodes) + prioritizedList, weight, err := sched.Extenders[extIndex].Prioritize(pod, nodes) if err != nil { // 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 } mu.Lock() @@ -777,7 +779,7 @@ func prioritizeNodes( nodename := (*prioritizedList)[i].Host score := (*prioritizedList)[i].Score 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, @@ -787,11 +789,11 @@ func prioritizeNodes( if allNodeExtendersScores[nodename] == nil { allNodeExtendersScores[nodename] = &framework.NodePluginScores{ 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{ - Name: extenders[extIndex].Name(), + Name: sched.Extenders[extIndex].Name(), Score: finalscore, }) allNodeExtendersScores[nodename].TotalScore += finalscore diff --git a/pkg/scheduler/schedule_one_test.go b/pkg/scheduler/schedule_one_test.go index 50eb8b0411e..d6bbc1cbcaa 100644 --- a/pkg/scheduler/schedule_one_test.go +++ b/pkg/scheduler/schedule_one_test.go @@ -2700,7 +2700,7 @@ func TestZeroRequest(t *testing.T) { t.Fatalf("error filtering nodes: %+v", err) } fwk.RunPreScorePlugins(ctx, state, test.pod, test.nodes) - list, err := prioritizeNodes(ctx, nil, fwk, state, test.pod, test.nodes) + list, err := sched.prioritizeNodes(ctx, fwk, state, test.pod, test.nodes) if err != nil { t.Errorf("unexpected error: %v", err) } @@ -3096,7 +3096,10 @@ func Test_prioritizeNodes(t *testing.T) { for ii := range test.extenders { extenders = append(extenders, &test.extenders[ii]) } - nodesscores, err := prioritizeNodes(ctx, extenders, fwk, state, test.pod, test.nodes) + sched := &Scheduler{ + Extenders: extenders, + } + nodesscores, err := sched.prioritizeNodes(ctx, fwk, state, test.pod, test.nodes) if err != nil { t.Errorf("unexpected error: %v", err) }