From d4418c1402188947cac992de96c04e44ad639997 Mon Sep 17 00:00:00 2001 From: drfish Date: Wed, 30 Dec 2020 16:42:06 +0800 Subject: [PATCH] Update the PreFilterExtensions interface to use PodInfo --- pkg/scheduler/framework/interface.go | 12 ++++----- .../defaultpreemption/default_preemption.go | 7 +++--- .../plugins/interpodaffinity/filtering.go | 24 ++++++++---------- .../interpodaffinity/filtering_test.go | 4 +-- .../plugins/podtopologyspread/filtering.go | 8 +++--- .../podtopologyspread/filtering_test.go | 4 +-- .../serviceaffinity/service_affinity.go | 14 +++++------ .../serviceaffinity/service_affinity_test.go | 7 +++--- pkg/scheduler/framework/runtime/framework.go | 25 ++++++++++--------- .../framework/runtime/framework_test.go | 8 +++--- test/integration/scheduler/preemption_test.go | 4 +-- 11 files changed, 58 insertions(+), 59 deletions(-) diff --git a/pkg/scheduler/framework/interface.go b/pkg/scheduler/framework/interface.go index 9ac2b8400d9..7cbd0adc441 100644 --- a/pkg/scheduler/framework/interface.go +++ b/pkg/scheduler/framework/interface.go @@ -246,10 +246,10 @@ type QueueSortPlugin interface { type PreFilterExtensions interface { // AddPod is called by the framework while trying to evaluate the impact // of adding podToAdd to the node while scheduling podToSchedule. - AddPod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *NodeInfo) *Status + AddPod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podInfoToAdd *PodInfo, nodeInfo *NodeInfo) *Status // RemovePod is called by the framework while trying to evaluate the impact // of removing podToRemove from the node while scheduling podToSchedule. - RemovePod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podToRemove *v1.Pod, nodeInfo *NodeInfo) *Status + RemovePod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podInfoToRemove *PodInfo, nodeInfo *NodeInfo) *Status } // PreFilterPlugin is an interface that must be implemented by "PreFilter" plugins. @@ -438,12 +438,12 @@ type Framework interface { // RunPreFilterExtensionAddPod calls the AddPod interface for the set of configured // PreFilter plugins. It returns directly if any of the plugins return any // status other than Success. - RunPreFilterExtensionAddPod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *NodeInfo) *Status + RunPreFilterExtensionAddPod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podInfoToAdd *PodInfo, nodeInfo *NodeInfo) *Status // RunPreFilterExtensionRemovePod calls the RemovePod interface for the set of configured // PreFilter plugins. It returns directly if any of the plugins return any // status other than Success. - RunPreFilterExtensionRemovePod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *NodeInfo) *Status + RunPreFilterExtensionRemovePod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podInfoToRemove *PodInfo, nodeInfo *NodeInfo) *Status // RunPreScorePlugins runs the set of configured PreScore plugins. If any // of these plugins returns any status other than "Success", the given pod is rejected. @@ -585,7 +585,7 @@ type PluginsRunner interface { // RunFilterPlugins runs the set of configured filter plugins for pod on the given node. RunFilterPlugins(context.Context, *CycleState, *v1.Pod, *NodeInfo) PluginToStatus // RunPreFilterExtensionAddPod calls the AddPod interface for the set of configured PreFilter plugins. - RunPreFilterExtensionAddPod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *NodeInfo) *Status + RunPreFilterExtensionAddPod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podInfoToAdd *PodInfo, nodeInfo *NodeInfo) *Status // RunPreFilterExtensionRemovePod calls the RemovePod interface for the set of configured PreFilter plugins. - RunPreFilterExtensionRemovePod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podToRemove *v1.Pod, nodeInfo *NodeInfo) *Status + RunPreFilterExtensionRemovePod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podInfoToRemove *PodInfo, nodeInfo *NodeInfo) *Status } diff --git a/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go b/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go index 75f361042d6..ccacda45476 100644 --- a/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go +++ b/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go @@ -603,15 +603,16 @@ func selectVictimsOnNode( if err := nodeInfo.RemovePod(rp); err != nil { return err } - status := ph.RunPreFilterExtensionRemovePod(ctx, state, pod, rp, nodeInfo) + status := ph.RunPreFilterExtensionRemovePod(ctx, state, pod, framework.NewPodInfo(rp), nodeInfo) if !status.IsSuccess() { return status.AsError() } return nil } addPod := func(ap *v1.Pod) error { - nodeInfo.AddPod(ap) - status := ph.RunPreFilterExtensionAddPod(ctx, state, pod, ap, nodeInfo) + podInfoToAdd := framework.NewPodInfo(ap) + nodeInfo.AddPodInfo(podInfoToAdd) + status := ph.RunPreFilterExtensionAddPod(ctx, state, pod, podInfoToAdd, nodeInfo) if !status.IsSuccess() { return status.AsError() } diff --git a/pkg/scheduler/framework/plugins/interpodaffinity/filtering.go b/pkg/scheduler/framework/plugins/interpodaffinity/filtering.go index 64a6ede3fb6..91a4d0ade1f 100644 --- a/pkg/scheduler/framework/plugins/interpodaffinity/filtering.go +++ b/pkg/scheduler/framework/plugins/interpodaffinity/filtering.go @@ -36,7 +36,7 @@ const ( // ErrReasonExistingAntiAffinityRulesNotMatch is used for ExistingPodsAntiAffinityRulesNotMatch predicate error. ErrReasonExistingAntiAffinityRulesNotMatch = "node(s) didn't satisfy existing pods anti-affinity rules" // ErrReasonAffinityNotMatch is used for MatchInterPodAffinity predicate error. - ErrReasonAffinityNotMatch = "node(s) didn't match pod affinity/anti-affinity" + ErrReasonAffinityNotMatch = "node(s) didn't match pod affinity/anti-affinity rules" // ErrReasonAffinityRulesNotMatch is used for PodAffinityRulesNotMatch predicate error. ErrReasonAffinityRulesNotMatch = "node(s) didn't match pod affinity rules" // ErrReasonAntiAffinityRulesNotMatch is used for PodAntiAffinityRulesNotMatch predicate error. @@ -71,22 +71,18 @@ func (s *preFilterState) Clone() framework.StateData { return © } -// updateWithPod updates the preFilterState counters with the (anti)affinity matches for the given pod. -func (s *preFilterState) updateWithPod(updatedPod *v1.Pod, node *v1.Node, multiplier int64) error { +// updateWithPod updates the preFilterState counters with the (anti)affinity matches for the given podInfo. +func (s *preFilterState) updateWithPod(updatedPodInfo *framework.PodInfo, node *v1.Node, multiplier int64) { if s == nil { - return nil + return } // Update matching existing anti-affinity terms. - // TODO(#91058): AddPod/RemovePod should pass a *framework.PodInfo type instead of *v1.Pod. - updatedPodInfo := framework.NewPodInfo(updatedPod) s.topologyToMatchedExistingAntiAffinityTerms.updateWithAntiAffinityTerms(s.podInfo.Pod, node, updatedPodInfo.RequiredAntiAffinityTerms, multiplier) // Update matching incoming pod (anti)affinity terms. - s.topologyToMatchedAffinityTerms.updateWithAffinityTerms(updatedPod, node, s.podInfo.RequiredAffinityTerms, multiplier) - s.topologyToMatchedAntiAffinityTerms.updateWithAntiAffinityTerms(updatedPod, node, s.podInfo.RequiredAntiAffinityTerms, multiplier) - - return nil + s.topologyToMatchedAffinityTerms.updateWithAffinityTerms(updatedPodInfo.Pod, node, s.podInfo.RequiredAffinityTerms, multiplier) + s.topologyToMatchedAntiAffinityTerms.updateWithAntiAffinityTerms(updatedPodInfo.Pod, node, s.podInfo.RequiredAntiAffinityTerms, multiplier) } // TODO(Huang-Wei): It might be possible to use "make(map[topologyPair]*int64)" so that @@ -279,22 +275,22 @@ func (pl *InterPodAffinity) PreFilterExtensions() framework.PreFilterExtensions } // AddPod from pre-computed data in cycleState. -func (pl *InterPodAffinity) AddPod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { +func (pl *InterPodAffinity) AddPod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podInfoToAdd *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status { state, err := getPreFilterState(cycleState) if err != nil { return framework.NewStatus(framework.Error, err.Error()) } - state.updateWithPod(podToAdd, nodeInfo.Node(), 1) + state.updateWithPod(podInfoToAdd, nodeInfo.Node(), 1) return nil } // RemovePod from pre-computed data in cycleState. -func (pl *InterPodAffinity) RemovePod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podToRemove *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { +func (pl *InterPodAffinity) RemovePod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podInfoToRemove *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status { state, err := getPreFilterState(cycleState) if err != nil { return framework.NewStatus(framework.Error, err.Error()) } - state.updateWithPod(podToRemove, nodeInfo.Node(), -1) + state.updateWithPod(podInfoToRemove, nodeInfo.Node(), -1) return nil } diff --git a/pkg/scheduler/framework/plugins/interpodaffinity/filtering_test.go b/pkg/scheduler/framework/plugins/interpodaffinity/filtering_test.go index 3e9bf5625f4..cc9e5873215 100644 --- a/pkg/scheduler/framework/plugins/interpodaffinity/filtering_test.go +++ b/pkg/scheduler/framework/plugins/interpodaffinity/filtering_test.go @@ -2061,7 +2061,7 @@ func TestPreFilterStateAddRemovePod(t *testing.T) { // Add test.addedPod to state1 and verify it is equal to allPodsState. nodeInfo := mustGetNodeInfo(t, snapshot, test.addedPod.Spec.NodeName) - if err := ipa.AddPod(context.Background(), cycleState, test.pendingPod, test.addedPod, nodeInfo); err != nil { + if err := ipa.AddPod(context.Background(), cycleState, test.pendingPod, framework.NewPodInfo(test.addedPod), nodeInfo); err != nil { t.Errorf("error adding pod to meta: %v", err) } @@ -2083,7 +2083,7 @@ func TestPreFilterStateAddRemovePod(t *testing.T) { } // Remove the added pod pod and make sure it is equal to the original state. - if err := ipa.RemovePod(context.Background(), cycleState, test.pendingPod, test.addedPod, nodeInfo); err != nil { + if err := ipa.RemovePod(context.Background(), cycleState, test.pendingPod, framework.NewPodInfo(test.addedPod), nodeInfo); err != nil { t.Errorf("error removing pod from meta: %v", err) } if !reflect.DeepEqual(originalState, state) { diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go b/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go index 9e92f52c244..7635d3d941f 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go @@ -158,24 +158,24 @@ func (pl *PodTopologySpread) PreFilterExtensions() framework.PreFilterExtensions } // AddPod from pre-computed data in cycleState. -func (pl *PodTopologySpread) AddPod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { +func (pl *PodTopologySpread) AddPod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podInfoToAdd *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status { s, err := getPreFilterState(cycleState) if err != nil { return framework.AsStatus(err) } - s.updateWithPod(podToAdd, podToSchedule, nodeInfo.Node(), 1) + s.updateWithPod(podInfoToAdd.Pod, podToSchedule, nodeInfo.Node(), 1) return nil } // RemovePod from pre-computed data in cycleState. -func (pl *PodTopologySpread) RemovePod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podToRemove *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { +func (pl *PodTopologySpread) RemovePod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podInfoToRemove *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status { s, err := getPreFilterState(cycleState) if err != nil { return framework.AsStatus(err) } - s.updateWithPod(podToRemove, podToSchedule, nodeInfo.Node(), -1) + s.updateWithPod(podInfoToRemove.Pod, podToSchedule, nodeInfo.Node(), -1) return nil } diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go b/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go index 5d8906d7b67..25304502906 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go @@ -838,7 +838,7 @@ func TestPreFilterStateAddPod(t *testing.T) { if err != nil { t.Fatal(err) } - if s := pl.AddPod(ctx, cs, tt.preemptor, tt.addedPod, nodeInfo); !s.IsSuccess() { + if s := pl.AddPod(ctx, cs, tt.preemptor, framework.NewPodInfo(tt.addedPod), nodeInfo); !s.IsSuccess() { t.Fatal(s.AsError()) } state, err := getPreFilterState(cs) @@ -1050,7 +1050,7 @@ func TestPreFilterStateRemovePod(t *testing.T) { if err != nil { t.Fatal(err) } - if s := pl.RemovePod(ctx, cs, tt.preemptor, deletedPod, nodeInfo); !s.IsSuccess() { + if s := pl.RemovePod(ctx, cs, tt.preemptor, framework.NewPodInfo(deletedPod), nodeInfo); !s.IsSuccess() { t.Fatal(s.AsError()) } diff --git a/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity.go b/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity.go index b97ce4770c3..8760c91bbaf 100644 --- a/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity.go +++ b/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity.go @@ -148,7 +148,7 @@ func (pl *ServiceAffinity) PreFilterExtensions() framework.PreFilterExtensions { } // AddPod from pre-computed data in cycleState. -func (pl *ServiceAffinity) AddPod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { +func (pl *ServiceAffinity) AddPod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podInfoToAdd *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status { s, err := getPreFilterState(cycleState) if err != nil { return framework.AsStatus(err) @@ -156,32 +156,32 @@ func (pl *ServiceAffinity) AddPod(ctx context.Context, cycleState *framework.Cyc // If addedPod is in the same namespace as the pod, update the list // of matching pods if applicable. - if podToAdd.Namespace != podToSchedule.Namespace { + if podInfoToAdd.Pod.Namespace != podToSchedule.Namespace { return nil } selector := createSelectorFromLabels(podToSchedule.Labels) - if selector.Matches(labels.Set(podToAdd.Labels)) { - s.matchingPodList = append(s.matchingPodList, podToAdd) + if selector.Matches(labels.Set(podInfoToAdd.Pod.Labels)) { + s.matchingPodList = append(s.matchingPodList, podInfoToAdd.Pod) } return nil } // RemovePod from pre-computed data in cycleState. -func (pl *ServiceAffinity) RemovePod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podToRemove *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { +func (pl *ServiceAffinity) RemovePod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podInfoToRemove *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status { s, err := getPreFilterState(cycleState) if err != nil { return framework.AsStatus(err) } if len(s.matchingPodList) == 0 || - podToRemove.Namespace != s.matchingPodList[0].Namespace { + podInfoToRemove.Pod.Namespace != s.matchingPodList[0].Namespace { return nil } for i, pod := range s.matchingPodList { - if pod.Name == podToRemove.Name && pod.Namespace == podToRemove.Namespace { + if pod.Name == podInfoToRemove.Pod.Name && pod.Namespace == podInfoToRemove.Pod.Namespace { s.matchingPodList = append(s.matchingPodList[:i], s.matchingPodList[i+1:]...) break } diff --git a/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go b/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go index 7ebd2a6d333..8aeaf0b323e 100644 --- a/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go +++ b/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go @@ -539,7 +539,8 @@ func TestPreFilterStateAddRemovePod(t *testing.T) { // Add test.addedPod to state1 and verify it is equal to allPodsState. nodeInfo := mustGetNodeInfo(t, snapshot, test.addedPod.Spec.NodeName) - if err := ipa.AddPod(context.Background(), state, test.pendingPod, test.addedPod, nodeInfo); err != nil { + addedPodInfo := framework.NewPodInfo(test.addedPod) + if err := ipa.AddPod(context.Background(), state, test.pendingPod, addedPodInfo, nodeInfo); err != nil { t.Errorf("error adding pod to preFilterState: %v", err) } @@ -547,8 +548,8 @@ func TestPreFilterStateAddRemovePod(t *testing.T) { t.Errorf("State is not equal, got: %v, want: %v", plState, plStateAllPods) } - // Remove the added pod pod and make sure it is equal to the original state. - if err := ipa.RemovePod(context.Background(), state, test.pendingPod, test.addedPod, nodeInfo); err != nil { + // Remove the added pod and make sure it is equal to the original state. + if err := ipa.RemovePod(context.Background(), state, test.pendingPod, addedPodInfo, nodeInfo); err != nil { t.Errorf("error removing pod from preFilterState: %v", err) } if !reflect.DeepEqual(sortState(plStateOriginal), sortState(plState)) { diff --git a/pkg/scheduler/framework/runtime/framework.go b/pkg/scheduler/framework/runtime/framework.go index 8c97c94f036..0a33fad2497 100644 --- a/pkg/scheduler/framework/runtime/framework.go +++ b/pkg/scheduler/framework/runtime/framework.go @@ -458,14 +458,14 @@ func (f *frameworkImpl) RunPreFilterExtensionAddPod( ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, - podToAdd *v1.Pod, + podInfoToAdd *framework.PodInfo, nodeInfo *framework.NodeInfo, ) (status *framework.Status) { for _, pl := range f.preFilterPlugins { if pl.PreFilterExtensions() == nil { continue } - status = f.runPreFilterExtensionAddPod(ctx, pl, state, podToSchedule, podToAdd, nodeInfo) + status = f.runPreFilterExtensionAddPod(ctx, pl, state, podToSchedule, podInfoToAdd, nodeInfo) if !status.IsSuccess() { err := status.AsError() klog.ErrorS(err, "Failed running AddPod on PreFilter plugin", "plugin", pl.Name(), "pod", klog.KObj(podToSchedule)) @@ -476,12 +476,12 @@ func (f *frameworkImpl) RunPreFilterExtensionAddPod( return nil } -func (f *frameworkImpl) runPreFilterExtensionAddPod(ctx context.Context, pl framework.PreFilterPlugin, state *framework.CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { +func (f *frameworkImpl) runPreFilterExtensionAddPod(ctx context.Context, pl framework.PreFilterPlugin, state *framework.CycleState, podToSchedule *v1.Pod, podInfoToAdd *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status { if !state.ShouldRecordPluginMetrics() { - return pl.PreFilterExtensions().AddPod(ctx, state, podToSchedule, podToAdd, nodeInfo) + return pl.PreFilterExtensions().AddPod(ctx, state, podToSchedule, podInfoToAdd, nodeInfo) } startTime := time.Now() - status := pl.PreFilterExtensions().AddPod(ctx, state, podToSchedule, podToAdd, nodeInfo) + status := pl.PreFilterExtensions().AddPod(ctx, state, podToSchedule, podInfoToAdd, nodeInfo) f.metricsRecorder.observePluginDurationAsync(preFilterExtensionAddPod, pl.Name(), status, metrics.SinceInSeconds(startTime)) return status } @@ -493,14 +493,14 @@ func (f *frameworkImpl) RunPreFilterExtensionRemovePod( ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, - podToRemove *v1.Pod, + podInfoToRemove *framework.PodInfo, nodeInfo *framework.NodeInfo, ) (status *framework.Status) { for _, pl := range f.preFilterPlugins { if pl.PreFilterExtensions() == nil { continue } - status = f.runPreFilterExtensionRemovePod(ctx, pl, state, podToSchedule, podToRemove, nodeInfo) + status = f.runPreFilterExtensionRemovePod(ctx, pl, state, podToSchedule, podInfoToRemove, nodeInfo) if !status.IsSuccess() { err := status.AsError() klog.ErrorS(err, "Failed running RemovePod on PreFilter plugin", "plugin", pl.Name(), "pod", klog.KObj(podToSchedule)) @@ -511,12 +511,12 @@ func (f *frameworkImpl) RunPreFilterExtensionRemovePod( return nil } -func (f *frameworkImpl) runPreFilterExtensionRemovePod(ctx context.Context, pl framework.PreFilterPlugin, state *framework.CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { +func (f *frameworkImpl) runPreFilterExtensionRemovePod(ctx context.Context, pl framework.PreFilterPlugin, state *framework.CycleState, podToSchedule *v1.Pod, podInfoToRemove *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status { if !state.ShouldRecordPluginMetrics() { - return pl.PreFilterExtensions().RemovePod(ctx, state, podToSchedule, podToAdd, nodeInfo) + return pl.PreFilterExtensions().RemovePod(ctx, state, podToSchedule, podInfoToRemove, nodeInfo) } startTime := time.Now() - status := pl.PreFilterExtensions().RemovePod(ctx, state, podToSchedule, podToAdd, nodeInfo) + status := pl.PreFilterExtensions().RemovePod(ctx, state, podToSchedule, podInfoToRemove, nodeInfo) f.metricsRecorder.observePluginDurationAsync(preFilterExtensionRemovePod, pl.Name(), status, metrics.SinceInSeconds(startTime)) return status } @@ -668,8 +668,9 @@ func addNominatedPods(ctx context.Context, ph framework.PreemptHandle, pod *v1.P podsAdded := false for _, p := range nominatedPods { if corev1.PodPriority(p) >= corev1.PodPriority(pod) && p.UID != pod.UID { - nodeInfoOut.AddPod(p) - status := ph.RunPreFilterExtensionAddPod(ctx, stateOut, pod, p, nodeInfoOut) + podInfoToAdd := framework.NewPodInfo(p) + nodeInfoOut.AddPodInfo(podInfoToAdd) + status := ph.RunPreFilterExtensionAddPod(ctx, stateOut, pod, podInfoToAdd, nodeInfoOut) if !status.IsSuccess() { return false, state, nodeInfo, status.AsError() } diff --git a/pkg/scheduler/framework/runtime/framework_test.go b/pkg/scheduler/framework/runtime/framework_test.go index d62f2e75744..4f8e8e948d7 100644 --- a/pkg/scheduler/framework/runtime/framework_test.go +++ b/pkg/scheduler/framework/runtime/framework_test.go @@ -141,10 +141,10 @@ type TestPlugin struct { inj injectedResult } -func (pl *TestPlugin) AddPod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { +func (pl *TestPlugin) AddPod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, podInfoToAdd *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status { return framework.NewStatus(framework.Code(pl.inj.PreFilterAddPodStatus), "injected status") } -func (pl *TestPlugin) RemovePod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, podToRemove *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { +func (pl *TestPlugin) RemovePod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, podInfoToRemove *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status { return framework.NewStatus(framework.Code(pl.inj.PreFilterRemovePodStatus), "injected status") } @@ -241,13 +241,13 @@ func (pl *TestPreFilterWithExtensionsPlugin) PreFilter(ctx context.Context, stat } func (pl *TestPreFilterWithExtensionsPlugin) AddPod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, - podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { + podInfoToAdd *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status { pl.AddCalled++ return nil } func (pl *TestPreFilterWithExtensionsPlugin) RemovePod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, - podToRemove *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { + podInfoToRemove *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status { pl.RemoveCalled++ return nil } diff --git a/test/integration/scheduler/preemption_test.go b/test/integration/scheduler/preemption_test.go index 7500ba3ad0b..00a36f1cf4a 100644 --- a/test/integration/scheduler/preemption_test.go +++ b/test/integration/scheduler/preemption_test.go @@ -104,13 +104,13 @@ func (fp *tokenFilter) PreFilter(ctx context.Context, state *framework.CycleStat } func (fp *tokenFilter) AddPod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, - podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { + podInfoToAdd *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status { fp.Tokens-- return nil } func (fp *tokenFilter) RemovePod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, - podToRemove *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { + podInfoToRemove *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status { fp.Tokens++ return nil }