Skip to content

Commit 0d723d4

Browse files
authored
Merge pull request kubernetes#92682 from Huang-Wei/preemptor-from-informer
Preemption plugin to fetch pod from informer cache
2 parents 0fd1099 + 4f7ae54 commit 0d723d4

File tree

4 files changed

+78
-73
lines changed

4 files changed

+78
-73
lines changed

pkg/scheduler/framework/plugins/defaultpreemption/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ go_library(
2424
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
2525
"//staging/src/k8s.io/client-go/informers:go_default_library",
2626
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
27+
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
2728
"//staging/src/k8s.io/client-go/listers/policy/v1beta1:go_default_library",
2829
"//staging/src/k8s.io/kube-scheduler/extender/v1:go_default_library",
2930
"//vendor/k8s.io/klog/v2:go_default_library",

pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
utilfeature "k8s.io/apiserver/pkg/util/feature"
3434
"k8s.io/client-go/informers"
3535
"k8s.io/client-go/kubernetes"
36+
corelisters "k8s.io/client-go/listers/core/v1"
3637
policylisters "k8s.io/client-go/listers/policy/v1beta1"
3738
extenderv1 "k8s.io/kube-scheduler/extender/v1"
3839
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
@@ -52,6 +53,7 @@ const (
5253
// DefaultPreemption is a PostFilter plugin implements the preemption logic.
5354
type DefaultPreemption struct {
5455
fh framework.FrameworkHandle
56+
podLister corelisters.PodLister
5557
pdbLister policylisters.PodDisruptionBudgetLister
5658
}
5759

@@ -66,6 +68,7 @@ func (pl *DefaultPreemption) Name() string {
6668
func New(_ runtime.Object, fh framework.FrameworkHandle) (framework.Plugin, error) {
6769
pl := DefaultPreemption{
6870
fh: fh,
71+
podLister: fh.SharedInformerFactory().Core().V1().Pods().Lister(),
6972
pdbLister: getPDBLister(fh.SharedInformerFactory()),
7073
}
7174
return &pl, nil
@@ -106,8 +109,10 @@ func (pl *DefaultPreemption) preempt(ctx context.Context, state *framework.Cycle
106109
nodeLister := pl.fh.SnapshotSharedLister().NodeInfos()
107110

108111
// 0) Fetch the latest version of <pod>.
109-
// TODO(Huang-Wei): get pod from informer cache instead of API server.
110-
pod, err := util.GetUpdatedPod(cs, pod)
112+
// It's safe to directly fetch pod here. Because the informer cache has already been
113+
// initialized when creating the Scheduler obj, i.e., factory.go#MakeDefaultErrorFunc().
114+
// However, tests may need to manually initialize the shared pod informer.
115+
pod, err := pl.podLister.Pods(pod.Namespace).Get(pod.Name)
111116
if err != nil {
112117
klog.Errorf("Error getting the updated preemptor pod object: %v", err)
113118
return "", err

pkg/scheduler/framework/plugins/defaultpreemption/default_preemption_test.go

Lines changed: 70 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -85,17 +85,6 @@ var (
8585
epochTime6 = metav1.NewTime(time.Unix(0, 6))
8686
)
8787

88-
func mergeObjs(pod *v1.Pod, pods []*v1.Pod) []runtime.Object {
89-
var objs []runtime.Object
90-
if pod != nil {
91-
objs = append(objs, pod)
92-
}
93-
for i := range pods {
94-
objs = append(objs, pods[i])
95-
}
96-
return objs
97-
}
98-
9988
func TestPostFilter(t *testing.T) {
10089
onePodRes := map[v1.ResourceName]string{v1.ResourcePods: "1"}
10190
tests := []struct {
@@ -110,9 +99,9 @@ func TestPostFilter(t *testing.T) {
11099
}{
111100
{
112101
name: "pod with higher priority can be made schedulable",
113-
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Obj(),
102+
pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Obj(),
114103
pods: []*v1.Pod{
115-
st.MakePod().Name("p1").UID("p1").Node("node1").Obj(),
104+
st.MakePod().Name("p1").UID("p1").Namespace(v1.NamespaceDefault).Node("node1").Obj(),
116105
},
117106
nodes: []*v1.Node{
118107
st.MakeNode().Name("node1").Capacity(onePodRes).Obj(),
@@ -125,9 +114,9 @@ func TestPostFilter(t *testing.T) {
125114
},
126115
{
127116
name: "pod with tied priority is still unschedulable",
128-
pod: st.MakePod().Name("p").UID("p").Obj(),
117+
pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Obj(),
129118
pods: []*v1.Pod{
130-
st.MakePod().Name("p1").UID("p1").Node("node1").Obj(),
119+
st.MakePod().Name("p1").UID("p1").Namespace(v1.NamespaceDefault).Node("node1").Obj(),
131120
},
132121
nodes: []*v1.Node{
133122
st.MakeNode().Name("node1").Capacity(onePodRes).Obj(),
@@ -140,9 +129,9 @@ func TestPostFilter(t *testing.T) {
140129
},
141130
{
142131
name: "preemption should respect filteredNodesStatuses",
143-
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Obj(),
132+
pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Obj(),
144133
pods: []*v1.Pod{
145-
st.MakePod().Name("p1").UID("p1").Node("node1").Obj(),
134+
st.MakePod().Name("p1").UID("p1").Namespace(v1.NamespaceDefault).Node("node1").Obj(),
146135
},
147136
nodes: []*v1.Node{
148137
st.MakeNode().Name("node1").Capacity(onePodRes).Obj(),
@@ -155,10 +144,10 @@ func TestPostFilter(t *testing.T) {
155144
},
156145
{
157146
name: "pod can be made schedulable on one node",
158-
pod: st.MakePod().Name("p").UID("p").Priority(midPriority).Obj(),
147+
pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(midPriority).Obj(),
159148
pods: []*v1.Pod{
160-
st.MakePod().Name("p1").UID("p1").Priority(highPriority).Node("node1").Obj(),
161-
st.MakePod().Name("p2").UID("p2").Priority(lowPriority).Node("node2").Obj(),
149+
st.MakePod().Name("p1").UID("p1").Namespace(v1.NamespaceDefault).Priority(highPriority).Node("node1").Obj(),
150+
st.MakePod().Name("p2").UID("p2").Namespace(v1.NamespaceDefault).Priority(lowPriority).Node("node2").Obj(),
162151
},
163152
nodes: []*v1.Node{
164153
st.MakeNode().Name("node1").Capacity(onePodRes).Obj(),
@@ -173,10 +162,10 @@ func TestPostFilter(t *testing.T) {
173162
},
174163
{
175164
name: "preemption result filtered out by extenders",
176-
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Obj(),
165+
pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Obj(),
177166
pods: []*v1.Pod{
178-
st.MakePod().Name("p1").UID("p1").Node("node1").Obj(),
179-
st.MakePod().Name("p2").UID("p2").Node("node2").Obj(),
167+
st.MakePod().Name("p1").UID("p1").Namespace(v1.NamespaceDefault).Node("node1").Obj(),
168+
st.MakePod().Name("p2").UID("p2").Namespace(v1.NamespaceDefault).Node("node2").Obj(),
180169
},
181170
nodes: []*v1.Node{
182171
st.MakeNode().Name("node1").Capacity(onePodRes).Obj(),
@@ -196,9 +185,18 @@ func TestPostFilter(t *testing.T) {
196185

197186
for _, tt := range tests {
198187
t.Run(tt.name, func(t *testing.T) {
199-
apiObjs := mergeObjs(tt.pod, tt.pods /*, tt.nodes */)
200-
cs := clientsetfake.NewSimpleClientset(apiObjs...)
188+
cs := clientsetfake.NewSimpleClientset()
201189
informerFactory := informers.NewSharedInformerFactory(cs, 0)
190+
podInformer := informerFactory.Core().V1().Pods().Informer()
191+
podInformer.GetStore().Add(tt.pod)
192+
for i := range tt.pods {
193+
podInformer.GetStore().Add(tt.pods[i])
194+
}
195+
// As we use a bare clientset above, it's needed to add a reactor here
196+
// to not fail Victims deletion logic.
197+
cs.PrependReactor("delete", "pods", func(action clienttesting.Action) (bool, runtime.Object, error) {
198+
return true, nil, nil
199+
})
202200
// Register NodeResourceFit as the Filter & PreFilter plugin.
203201
registeredPlugins := []st.RegisterPluginFunc{
204202
st.RegisterQueueSortPlugin(queuesort.Name, queuesort.New),
@@ -220,17 +218,18 @@ func TestPostFilter(t *testing.T) {
220218
if err != nil {
221219
t.Fatal(err)
222220
}
221+
p := DefaultPreemption{
222+
fh: f,
223+
podLister: informerFactory.Core().V1().Pods().Lister(),
224+
pdbLister: getPDBLister(informerFactory),
225+
}
223226

224227
state := framework.NewCycleState()
225228
// Ensure <state> is populated.
226229
if status := f.RunPreFilterPlugins(context.Background(), state, tt.pod); !status.IsSuccess() {
227230
t.Errorf("Unexpected PreFilter Status: %v", status)
228231
}
229232

230-
p := DefaultPreemption{
231-
fh: f,
232-
pdbLister: getPDBLister(informerFactory),
233-
}
234233
gotResult, gotStatus := p.PostFilter(context.TODO(), state, tt.pod, tt.filteredNodesStatuses)
235234
if !reflect.DeepEqual(gotStatus, tt.wantStatus) {
236235
t.Errorf("Status does not match: %v, want: %v", gotStatus, tt.wantStatus)
@@ -1105,7 +1104,7 @@ func TestPreempt(t *testing.T) {
11051104
}{
11061105
{
11071106
name: "basic preemption logic",
1108-
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(),
1107+
pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(),
11091108
pods: []*v1.Pod{
11101109
st.MakePod().Name("p1.1").UID("p1.1").Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
11111110
st.MakePod().Name("p1.2").UID("p1.2").Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
@@ -1119,16 +1118,16 @@ func TestPreempt(t *testing.T) {
11191118
},
11201119
{
11211120
name: "preemption for topology spread constraints",
1122-
pod: st.MakePod().Name("p").UID("p").Label("foo", "").Priority(highPriority).
1121+
pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Label("foo", "").Priority(highPriority).
11231122
SpreadConstraint(1, "zone", v1.DoNotSchedule, st.MakeLabelSelector().Exists("foo").Obj()).
11241123
SpreadConstraint(1, "hostname", v1.DoNotSchedule, st.MakeLabelSelector().Exists("foo").Obj()).
11251124
Obj(),
11261125
pods: []*v1.Pod{
1127-
st.MakePod().Name("p-a1").UID("p-a1").Node("node-a").Label("foo", "").Priority(highPriority).Obj(),
1128-
st.MakePod().Name("p-a2").UID("p-a2").Node("node-a").Label("foo", "").Priority(highPriority).Obj(),
1129-
st.MakePod().Name("p-b1").UID("p-b1").Node("node-b").Label("foo", "").Priority(lowPriority).Obj(),
1130-
st.MakePod().Name("p-x1").UID("p-x1").Node("node-x").Label("foo", "").Priority(highPriority).Obj(),
1131-
st.MakePod().Name("p-x2").UID("p-x2").Node("node-x").Label("foo", "").Priority(highPriority).Obj(),
1126+
st.MakePod().Name("p-a1").UID("p-a1").Namespace(v1.NamespaceDefault).Node("node-a").Label("foo", "").Priority(highPriority).Obj(),
1127+
st.MakePod().Name("p-a2").UID("p-a2").Namespace(v1.NamespaceDefault).Node("node-a").Label("foo", "").Priority(highPriority).Obj(),
1128+
st.MakePod().Name("p-b1").UID("p-b1").Namespace(v1.NamespaceDefault).Node("node-b").Label("foo", "").Priority(lowPriority).Obj(),
1129+
st.MakePod().Name("p-x1").UID("p-x1").Namespace(v1.NamespaceDefault).Node("node-x").Label("foo", "").Priority(highPriority).Obj(),
1130+
st.MakePod().Name("p-x2").UID("p-x2").Namespace(v1.NamespaceDefault).Node("node-x").Label("foo", "").Priority(highPriority).Obj(),
11321131
},
11331132
nodeNames: []string{"node-a/zone1", "node-b/zone1", "node-x/zone2"},
11341133
registerPlugin: st.RegisterPluginAsExtensions(podtopologyspread.Name, podtopologyspread.New, "PreFilter", "Filter"),
@@ -1137,11 +1136,11 @@ func TestPreempt(t *testing.T) {
11371136
},
11381137
{
11391138
name: "Scheduler extenders allow only node1, otherwise node3 would have been chosen",
1140-
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(),
1139+
pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(),
11411140
pods: []*v1.Pod{
1142-
st.MakePod().Name("p1.1").UID("p1.1").Node("node1").Priority(midPriority).Req(smallRes).Obj(),
1143-
st.MakePod().Name("p1.2").UID("p1.2").Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1144-
st.MakePod().Name("p2.1").UID("p2.1").Node("node3").Priority(midPriority).Req(largeRes).Obj(),
1141+
st.MakePod().Name("p1.1").UID("p1.1").Namespace(v1.NamespaceDefault).Node("node1").Priority(midPriority).Req(smallRes).Obj(),
1142+
st.MakePod().Name("p1.2").UID("p1.2").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1143+
st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node3").Priority(midPriority).Req(largeRes).Obj(),
11451144
},
11461145
nodeNames: []string{"node1", "node2", "node3"},
11471146
extenders: []*st.FakeExtender{
@@ -1154,11 +1153,11 @@ func TestPreempt(t *testing.T) {
11541153
},
11551154
{
11561155
name: "Scheduler extenders do not allow any preemption",
1157-
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(),
1156+
pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(),
11581157
pods: []*v1.Pod{
1159-
st.MakePod().Name("p1.1").UID("p1.1").Node("node1").Priority(midPriority).Req(smallRes).Obj(),
1160-
st.MakePod().Name("p1.2").UID("p1.2").Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1161-
st.MakePod().Name("p2.1").UID("p2.1").Node("node2").Priority(midPriority).Req(largeRes).Obj(),
1158+
st.MakePod().Name("p1.1").UID("p1.1").Namespace(v1.NamespaceDefault).Node("node1").Priority(midPriority).Req(smallRes).Obj(),
1159+
st.MakePod().Name("p1.2").UID("p1.2").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1160+
st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node2").Priority(midPriority).Req(largeRes).Obj(),
11621161
},
11631162
nodeNames: []string{"node1", "node2", "node3"},
11641163
extenders: []*st.FakeExtender{
@@ -1170,11 +1169,11 @@ func TestPreempt(t *testing.T) {
11701169
},
11711170
{
11721171
name: "One scheduler extender allows only node1, the other returns error but ignorable. Only node1 would be chosen",
1173-
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(),
1172+
pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(),
11741173
pods: []*v1.Pod{
1175-
st.MakePod().Name("p1.1").UID("p1.1").Node("node1").Priority(midPriority).Req(smallRes).Obj(),
1176-
st.MakePod().Name("p1.2").UID("p1.2").Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1177-
st.MakePod().Name("p2.1").UID("p2.1").Node("node2").Priority(midPriority).Req(largeRes).Obj(),
1174+
st.MakePod().Name("p1.1").UID("p1.1").Namespace(v1.NamespaceDefault).Node("node1").Priority(midPriority).Req(smallRes).Obj(),
1175+
st.MakePod().Name("p1.2").UID("p1.2").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1176+
st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node2").Priority(midPriority).Req(largeRes).Obj(),
11781177
},
11791178
nodeNames: []string{"node1", "node2", "node3"},
11801179
extenders: []*st.FakeExtender{
@@ -1187,11 +1186,11 @@ func TestPreempt(t *testing.T) {
11871186
},
11881187
{
11891188
name: "One scheduler extender allows only node1, but it is not interested in given pod, otherwise node1 would have been chosen",
1190-
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(),
1189+
pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(),
11911190
pods: []*v1.Pod{
1192-
st.MakePod().Name("p1.1").UID("p1.1").Node("node1").Priority(midPriority).Req(smallRes).Obj(),
1193-
st.MakePod().Name("p1.2").UID("p1.2").Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1194-
st.MakePod().Name("p2.1").UID("p2.1").Node("node2").Priority(midPriority).Req(largeRes).Obj(),
1191+
st.MakePod().Name("p1.1").UID("p1.1").Namespace(v1.NamespaceDefault).Node("node1").Priority(midPriority).Req(smallRes).Obj(),
1192+
st.MakePod().Name("p1.2").UID("p1.2").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1193+
st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node2").Priority(midPriority).Req(largeRes).Obj(),
11951194
},
11961195
nodeNames: []string{"node1", "node2"},
11971196
extenders: []*st.FakeExtender{
@@ -1205,12 +1204,12 @@ func TestPreempt(t *testing.T) {
12051204
},
12061205
{
12071206
name: "no preempting in pod",
1208-
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptNever).Obj(),
1207+
pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptNever).Obj(),
12091208
pods: []*v1.Pod{
1210-
st.MakePod().Name("p1.1").UID("p1.1").Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1211-
st.MakePod().Name("p1.2").UID("p1.2").Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1212-
st.MakePod().Name("p2.1").UID("p2.1").Node("node2").Priority(highPriority).Req(largeRes).Obj(),
1213-
st.MakePod().Name("p3.1").UID("p3.1").Node("node3").Priority(midPriority).Req(mediumRes).Obj(),
1209+
st.MakePod().Name("p1.1").UID("p1.1").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1210+
st.MakePod().Name("p1.2").UID("p1.2").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1211+
st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node2").Priority(highPriority).Req(largeRes).Obj(),
1212+
st.MakePod().Name("p3.1").UID("p3.1").Namespace(v1.NamespaceDefault).Node("node3").Priority(midPriority).Req(mediumRes).Obj(),
12141213
},
12151214
nodeNames: []string{"node1", "node2", "node3"},
12161215
registerPlugin: st.RegisterPluginAsExtensions(noderesources.FitName, noderesources.NewFit, "Filter", "PreFilter"),
@@ -1219,12 +1218,12 @@ func TestPreempt(t *testing.T) {
12191218
},
12201219
{
12211220
name: "PreemptionPolicy is nil",
1222-
pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).Obj(),
1221+
pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Req(veryLargeRes).Obj(),
12231222
pods: []*v1.Pod{
1224-
st.MakePod().Name("p1.1").UID("p1.1").Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1225-
st.MakePod().Name("p1.2").UID("p1.2").Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1226-
st.MakePod().Name("p2.1").UID("p2.1").Node("node2").Priority(highPriority).Req(largeRes).Obj(),
1227-
st.MakePod().Name("p3.1").UID("p3.1").Node("node3").Priority(midPriority).Req(mediumRes).Obj(),
1223+
st.MakePod().Name("p1.1").UID("p1.1").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1224+
st.MakePod().Name("p1.2").UID("p1.2").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(),
1225+
st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node2").Priority(highPriority).Req(largeRes).Obj(),
1226+
st.MakePod().Name("p3.1").UID("p3.1").Namespace(v1.NamespaceDefault).Node("node3").Priority(midPriority).Req(mediumRes).Obj(),
12281227
},
12291228
nodeNames: []string{"node1", "node2", "node3"},
12301229
registerPlugin: st.RegisterPluginAsExtensions(noderesources.FitName, noderesources.NewFit, "Filter", "PreFilter"),
@@ -1236,8 +1235,14 @@ func TestPreempt(t *testing.T) {
12361235
labelKeys := []string{"hostname", "zone", "region"}
12371236
for _, test := range tests {
12381237
t.Run(test.name, func(t *testing.T) {
1239-
apiObjs := mergeObjs(test.pod, test.pods)
1240-
client := clientsetfake.NewSimpleClientset(apiObjs...)
1238+
client := clientsetfake.NewSimpleClientset()
1239+
informerFactory := informers.NewSharedInformerFactory(client, 0)
1240+
podInformer := informerFactory.Core().V1().Pods().Informer()
1241+
podInformer.GetStore().Add(test.pod)
1242+
for i := range test.pods {
1243+
podInformer.GetStore().Add(test.pods[i])
1244+
}
1245+
12411246
deletedPodNames := make(sets.String)
12421247
client.PrependReactor("delete", "pods", func(action clienttesting.Action) (bool, runtime.Object, error) {
12431248
deletedPodNames.Insert(action.(clienttesting.DeleteAction).GetName())
@@ -1277,7 +1282,6 @@ func TestPreempt(t *testing.T) {
12771282
extenders = append(extenders, extender)
12781283
}
12791284

1280-
informerFactory := informers.NewSharedInformerFactory(client, 0)
12811285
fwk, err := st.NewFramework(
12821286
[]st.RegisterPluginFunc{
12831287
test.registerPlugin,
@@ -1304,6 +1308,7 @@ func TestPreempt(t *testing.T) {
13041308
// Call preempt and check the expected results.
13051309
pl := DefaultPreemption{
13061310
fh: fwk,
1311+
podLister: informerFactory.Core().V1().Pods().Lister(),
13071312
pdbLister: getPDBLister(informerFactory),
13081313
}
13091314
node, err := pl.preempt(context.Background(), state, test.pod, make(framework.NodeToStatusMap))
@@ -1332,7 +1337,6 @@ func TestPreempt(t *testing.T) {
13321337
}
13331338
}
13341339
test.pod.Status.NominatedNodeName = node
1335-
client.CoreV1().Pods(test.pod.Namespace).Update(context.TODO(), test.pod, metav1.UpdateOptions{})
13361340

13371341
// Manually set the deleted Pods' deletionTimestamp to non-nil.
13381342
for _, pod := range test.pods {

0 commit comments

Comments
 (0)