Skip to content

Commit 9134c17

Browse files
authored
Merge pull request kubernetes#127220 from sanposhiho/switch-events
feat: remove node general update event from EventsToRegister when QHint is enabled
2 parents b414039 + fe3ab64 commit 9134c17

File tree

26 files changed

+271
-168
lines changed

26 files changed

+271
-168
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -638,7 +638,7 @@ func TestDryRunPreemption(t *testing.T) {
638638
name: "pod with anti-affinity is preempted",
639639
registerPlugins: []tf.RegisterPluginFunc{
640640
tf.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
641-
tf.RegisterPluginAsExtensions(interpodaffinity.Name, interpodaffinity.New, "Filter", "PreFilter"),
641+
tf.RegisterPluginAsExtensions(interpodaffinity.Name, frameworkruntime.FactoryAdapter(feature.Features{}, interpodaffinity.New), "Filter", "PreFilter"),
642642
},
643643
nodeNames: []string{"node1", "node2"},
644644
testPods: []*v1.Pod{

pkg/scheduler/framework/plugins/dynamicresources/dynamicresources.go

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ func statusForClaim(schedulingCtx *resourceapi.PodSchedulingContext, podClaimNam
271271
// dynamicResources is a plugin that ensures that ResourceClaims are allocated.
272272
type dynamicResources struct {
273273
enabled bool
274+
enableSchedulingQueueHint bool
274275
controlPlaneControllerEnabled bool
275276

276277
fh framework.Handle
@@ -345,6 +346,7 @@ func New(ctx context.Context, plArgs runtime.Object, fh framework.Handle, fts fe
345346
pl := &dynamicResources{
346347
enabled: true,
347348
controlPlaneControllerEnabled: fts.EnableDRAControlPlaneController,
349+
enableSchedulingQueueHint: fts.EnableSchedulingQueueHint,
348350

349351
fh: fh,
350352
clientset: fh.ClientSet(),
@@ -380,22 +382,23 @@ func (pl *dynamicResources) EventsToRegister(_ context.Context) ([]framework.Clu
380382
if !pl.enabled {
381383
return nil, nil
382384
}
385+
// A resource might depend on node labels for topology filtering.
386+
// A new or updated node may make pods schedulable.
387+
//
388+
// A note about UpdateNodeTaint event:
389+
// Ideally, it's supposed to register only Add | UpdateNodeLabel because UpdateNodeTaint will never change the result from this plugin.
390+
// But, we may miss Node/Add event due to preCheck, and we decided to register UpdateNodeTaint | UpdateNodeLabel for all plugins registering Node/Add.
391+
// See: https://github.com/kubernetes/kubernetes/issues/109437
392+
nodeActionType := framework.Add | framework.UpdateNodeLabel | framework.UpdateNodeTaint
393+
if pl.enableSchedulingQueueHint {
394+
// When QHint is enabled, the problematic preCheck is already removed, and we can remove UpdateNodeTaint.
395+
nodeActionType = framework.Add | framework.UpdateNodeLabel
396+
}
383397

384398
events := []framework.ClusterEventWithHint{
399+
{Event: framework.ClusterEvent{Resource: framework.Node, ActionType: nodeActionType}},
385400
// Allocation is tracked in ResourceClaims, so any changes may make the pods schedulable.
386401
{Event: framework.ClusterEvent{Resource: framework.ResourceClaim, ActionType: framework.Add | framework.Update}, QueueingHintFn: pl.isSchedulableAfterClaimChange},
387-
// A resource might depend on node labels for topology filtering.
388-
// A new or updated node may make pods schedulable.
389-
//
390-
// A note about UpdateNodeTaint event:
391-
// NodeAdd QueueingHint isn't always called because of the internal feature called preCheck.
392-
// As a common problematic scenario,
393-
// when a node is added but not ready, NodeAdd event is filtered out by preCheck and doesn't arrive.
394-
// In such cases, this plugin may miss some events that actually make pods schedulable.
395-
// As a workaround, we add UpdateNodeTaint event to catch the case.
396-
// We can remove UpdateNodeTaint when we remove the preCheck feature.
397-
// See: https://github.com/kubernetes/kubernetes/issues/110175
398-
{Event: framework.ClusterEvent{Resource: framework.Node, ActionType: framework.Add | framework.UpdateNodeLabel | framework.UpdateNodeTaint}},
399402
// A pod might be waiting for a class to get created or modified.
400403
{Event: framework.ClusterEvent{Resource: framework.DeviceClass, ActionType: framework.Add | framework.Update}},
401404
// Adding or updating a ResourceSlice might make a pod schedulable because new resources became available.

pkg/scheduler/framework/plugins/interpodaffinity/filtering_test.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ import (
3030
"k8s.io/kubernetes/pkg/scheduler/apis/config"
3131
"k8s.io/kubernetes/pkg/scheduler/backend/cache"
3232
"k8s.io/kubernetes/pkg/scheduler/framework"
33+
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/feature"
3334
plugintesting "k8s.io/kubernetes/pkg/scheduler/framework/plugins/testing"
35+
schedruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime"
3436
"k8s.io/kubernetes/pkg/scheduler/metrics"
3537
st "k8s.io/kubernetes/pkg/scheduler/testing"
3638
)
@@ -544,7 +546,7 @@ func TestRequiredAffinitySingleNode(t *testing.T) {
544546
ctx, cancel := context.WithCancel(ctx)
545547
defer cancel()
546548
snapshot := cache.NewSnapshot(test.pods, []*v1.Node{test.node})
547-
p := plugintesting.SetupPluginWithInformers(ctx, t, New, &config.InterPodAffinityArgs{}, snapshot, namespaces)
549+
p := plugintesting.SetupPluginWithInformers(ctx, t, schedruntime.FactoryAdapter(feature.Features{}, New), &config.InterPodAffinityArgs{}, snapshot, namespaces)
548550
state := framework.NewCycleState()
549551
_, preFilterStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, state, test.pod)
550552
if diff := cmp.Diff(preFilterStatus, test.wantPreFilterStatus); diff != "" {
@@ -956,7 +958,7 @@ func TestRequiredAffinityMultipleNodes(t *testing.T) {
956958
ctx, cancel := context.WithCancel(ctx)
957959
defer cancel()
958960
snapshot := cache.NewSnapshot(test.pods, test.nodes)
959-
p := plugintesting.SetupPluginWithInformers(ctx, t, New, &config.InterPodAffinityArgs{}, snapshot,
961+
p := plugintesting.SetupPluginWithInformers(ctx, t, schedruntime.FactoryAdapter(feature.Features{}, New), &config.InterPodAffinityArgs{}, snapshot,
960962
[]runtime.Object{
961963
&v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: "NS1"}},
962964
})
@@ -987,7 +989,7 @@ func TestPreFilterDisabled(t *testing.T) {
987989
_, ctx := ktesting.NewTestContext(t)
988990
ctx, cancel := context.WithCancel(ctx)
989991
defer cancel()
990-
p := plugintesting.SetupPluginWithInformers(ctx, t, New, &config.InterPodAffinityArgs{}, cache.NewEmptySnapshot(), nil)
992+
p := plugintesting.SetupPluginWithInformers(ctx, t, schedruntime.FactoryAdapter(feature.Features{}, New), &config.InterPodAffinityArgs{}, cache.NewEmptySnapshot(), nil)
991993
cycleState := framework.NewCycleState()
992994
gotStatus := p.(framework.FilterPlugin).Filter(ctx, cycleState, pod, nodeInfo)
993995
wantStatus := framework.AsStatus(fmt.Errorf(`error reading "PreFilterInterPodAffinity" from cycleState: %w`, framework.ErrNotFound))
@@ -1232,7 +1234,7 @@ func TestPreFilterStateAddRemovePod(t *testing.T) {
12321234
_, ctx := ktesting.NewTestContext(t)
12331235
ctx, cancel := context.WithCancel(ctx)
12341236
defer cancel()
1235-
p := plugintesting.SetupPluginWithInformers(ctx, t, New, &config.InterPodAffinityArgs{}, snapshot, nil)
1237+
p := plugintesting.SetupPluginWithInformers(ctx, t, schedruntime.FactoryAdapter(feature.Features{}, New), &config.InterPodAffinityArgs{}, snapshot, nil)
12361238
cycleState := framework.NewCycleState()
12371239
_, preFilterStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, cycleState, test.pendingPod)
12381240
if !preFilterStatus.IsSuccess() {
@@ -1435,7 +1437,7 @@ func TestGetTPMapMatchingIncomingAffinityAntiAffinity(t *testing.T) {
14351437
_, ctx := ktesting.NewTestContext(t)
14361438
ctx, cancel := context.WithCancel(ctx)
14371439
defer cancel()
1438-
p := plugintesting.SetupPluginWithInformers(ctx, t, New, &config.InterPodAffinityArgs{}, snapshot, nil)
1440+
p := plugintesting.SetupPluginWithInformers(ctx, t, schedruntime.FactoryAdapter(feature.Features{}, New), &config.InterPodAffinityArgs{}, snapshot, nil)
14391441
gotAffinityPodsMap, gotAntiAffinityPodsMap := p.(*InterPodAffinity).getIncomingAffinityAntiAffinityCounts(ctx, mustNewPodInfo(t, tt.pod), l)
14401442
if !reflect.DeepEqual(gotAffinityPodsMap, tt.wantAffinityPodsMap) {
14411443
t.Errorf("getTPMapMatchingIncomingAffinityAntiAffinity() gotAffinityPodsMap = %#v, want %#v", gotAffinityPodsMap, tt.wantAffinityPodsMap)

pkg/scheduler/framework/plugins/interpodaffinity/plugin.go

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"k8s.io/kubernetes/pkg/scheduler/apis/config/validation"
3030
"k8s.io/kubernetes/pkg/scheduler/framework"
3131
"k8s.io/kubernetes/pkg/scheduler/framework/parallelize"
32+
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/feature"
3233
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
3334
"k8s.io/kubernetes/pkg/scheduler/util"
3435
)
@@ -44,10 +45,11 @@ var _ framework.EnqueueExtensions = &InterPodAffinity{}
4445

4546
// InterPodAffinity is a plugin that checks inter pod affinity
4647
type InterPodAffinity struct {
47-
parallelizer parallelize.Parallelizer
48-
args config.InterPodAffinityArgs
49-
sharedLister framework.SharedLister
50-
nsLister listersv1.NamespaceLister
48+
parallelizer parallelize.Parallelizer
49+
args config.InterPodAffinityArgs
50+
sharedLister framework.SharedLister
51+
nsLister listersv1.NamespaceLister
52+
enableSchedulingQueueHint bool
5153
}
5254

5355
// Name returns name of the plugin. It is used in logs, etc.
@@ -58,6 +60,15 @@ func (pl *InterPodAffinity) Name() string {
5860
// EventsToRegister returns the possible events that may make a failed Pod
5961
// schedulable
6062
func (pl *InterPodAffinity) EventsToRegister(_ context.Context) ([]framework.ClusterEventWithHint, error) {
63+
// A note about UpdateNodeTaint event:
64+
// Ideally, it's supposed to register only Add | UpdateNodeLabel because UpdateNodeTaint will never change the result from this plugin.
65+
// But, we may miss Node/Add event due to preCheck, and we decided to register UpdateNodeTaint | UpdateNodeLabel for all plugins registering Node/Add.
66+
// See: https://github.com/kubernetes/kubernetes/issues/109437
67+
nodeActionType := framework.Add | framework.UpdateNodeLabel | framework.UpdateNodeTaint
68+
if pl.enableSchedulingQueueHint {
69+
// When QueueingHint is enabled, we don't use preCheck and we don't need to register UpdateNodeTaint event.
70+
nodeActionType = framework.Add | framework.UpdateNodeLabel
71+
}
6172
return []framework.ClusterEventWithHint{
6273
// All ActionType includes the following events:
6374
// - Delete. An unschedulable Pod may fail due to violating an existing Pod's anti-affinity constraints,
@@ -66,22 +77,13 @@ func (pl *InterPodAffinity) EventsToRegister(_ context.Context) ([]framework.Clu
6677
// an unschedulable Pod schedulable.
6778
// - Add. An unschedulable Pod may fail due to violating pod-affinity constraints,
6879
// adding an assigned Pod may make it schedulable.
69-
//
70-
// A note about UpdateNodeTaint event:
71-
// NodeAdd QueueingHint isn't always called because of the internal feature called preCheck.
72-
// As a common problematic scenario,
73-
// when a node is added but not ready, NodeAdd event is filtered out by preCheck and doesn't arrive.
74-
// In such cases, this plugin may miss some events that actually make pods schedulable.
75-
// As a workaround, we add UpdateNodeTaint event to catch the case.
76-
// We can remove UpdateNodeTaint when we remove the preCheck feature.
77-
// See: https://github.com/kubernetes/kubernetes/issues/110175
7880
{Event: framework.ClusterEvent{Resource: framework.Pod, ActionType: framework.Add | framework.UpdatePodLabel | framework.Delete}, QueueingHintFn: pl.isSchedulableAfterPodChange},
79-
{Event: framework.ClusterEvent{Resource: framework.Node, ActionType: framework.Add | framework.UpdateNodeLabel | framework.UpdateNodeTaint}, QueueingHintFn: pl.isSchedulableAfterNodeChange},
81+
{Event: framework.ClusterEvent{Resource: framework.Node, ActionType: nodeActionType}, QueueingHintFn: pl.isSchedulableAfterNodeChange},
8082
}, nil
8183
}
8284

8385
// New initializes a new plugin and returns it.
84-
func New(_ context.Context, plArgs runtime.Object, h framework.Handle) (framework.Plugin, error) {
86+
func New(_ context.Context, plArgs runtime.Object, h framework.Handle, fts feature.Features) (framework.Plugin, error) {
8587
if h.SnapshotSharedLister() == nil {
8688
return nil, fmt.Errorf("SnapshotSharedlister is nil")
8789
}
@@ -93,10 +95,11 @@ func New(_ context.Context, plArgs runtime.Object, h framework.Handle) (framewor
9395
return nil, err
9496
}
9597
pl := &InterPodAffinity{
96-
parallelizer: h.Parallelizer(),
97-
args: args,
98-
sharedLister: h.SnapshotSharedLister(),
99-
nsLister: h.SharedInformerFactory().Core().V1().Namespaces().Lister(),
98+
parallelizer: h.Parallelizer(),
99+
args: args,
100+
sharedLister: h.SnapshotSharedLister(),
101+
nsLister: h.SharedInformerFactory().Core().V1().Namespaces().Lister(),
102+
enableSchedulingQueueHint: fts.EnableSchedulingQueueHint,
100103
}
101104

102105
return pl, nil

pkg/scheduler/framework/plugins/interpodaffinity/plugin_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ import (
2727
"k8s.io/kubernetes/pkg/scheduler/apis/config"
2828
"k8s.io/kubernetes/pkg/scheduler/backend/cache"
2929
"k8s.io/kubernetes/pkg/scheduler/framework"
30+
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/feature"
3031
plugintesting "k8s.io/kubernetes/pkg/scheduler/framework/plugins/testing"
32+
schedruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime"
3133
st "k8s.io/kubernetes/pkg/scheduler/testing"
3234
)
3335

@@ -134,7 +136,7 @@ func Test_isSchedulableAfterPodChange(t *testing.T) {
134136
defer cancel()
135137

136138
snapshot := cache.NewSnapshot(nil, nil)
137-
pl := plugintesting.SetupPluginWithInformers(ctx, t, New, &config.InterPodAffinityArgs{}, snapshot, namespaces)
139+
pl := plugintesting.SetupPluginWithInformers(ctx, t, schedruntime.FactoryAdapter(feature.Features{}, New), &config.InterPodAffinityArgs{}, snapshot, namespaces)
138140
p := pl.(*InterPodAffinity)
139141
actualHint, err := p.isSchedulableAfterPodChange(logger, tc.pod, tc.oldPod, tc.newPod)
140142
if err != nil {
@@ -194,7 +196,7 @@ func Test_isSchedulableAfterNodeChange(t *testing.T) {
194196
defer cancel()
195197

196198
snapshot := cache.NewSnapshot(nil, nil)
197-
pl := plugintesting.SetupPluginWithInformers(ctx, t, New, &config.InterPodAffinityArgs{}, snapshot, namespaces)
199+
pl := plugintesting.SetupPluginWithInformers(ctx, t, schedruntime.FactoryAdapter(feature.Features{}, New), &config.InterPodAffinityArgs{}, snapshot, namespaces)
198200
p := pl.(*InterPodAffinity)
199201
actualHint, err := p.isSchedulableAfterNodeChange(logger, tc.pod, tc.oldNode, tc.newNode)
200202
if err != nil {

pkg/scheduler/framework/plugins/interpodaffinity/scoring_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ import (
3030
"k8s.io/kubernetes/pkg/scheduler/apis/config"
3131
"k8s.io/kubernetes/pkg/scheduler/backend/cache"
3232
"k8s.io/kubernetes/pkg/scheduler/framework"
33+
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/feature"
3334
plugintesting "k8s.io/kubernetes/pkg/scheduler/framework/plugins/testing"
35+
schedruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime"
3436
tf "k8s.io/kubernetes/pkg/scheduler/testing/framework"
3537
)
3638

@@ -783,7 +785,7 @@ func TestPreferredAffinity(t *testing.T) {
783785
ctx, cancel := context.WithCancel(ctx)
784786
defer cancel()
785787
state := framework.NewCycleState()
786-
p := plugintesting.SetupPluginWithInformers(ctx, t, New, &config.InterPodAffinityArgs{HardPodAffinityWeight: 1, IgnorePreferredTermsOfExistingPods: test.ignorePreferredTermsOfExistingPods}, cache.NewSnapshot(test.pods, test.nodes), namespaces)
788+
p := plugintesting.SetupPluginWithInformers(ctx, t, schedruntime.FactoryAdapter(feature.Features{}, New), &config.InterPodAffinityArgs{HardPodAffinityWeight: 1, IgnorePreferredTermsOfExistingPods: test.ignorePreferredTermsOfExistingPods}, cache.NewSnapshot(test.pods, test.nodes), namespaces)
787789
status := p.(framework.PreScorePlugin).PreScore(ctx, state, test.pod, tf.BuildNodeInfos(test.nodes))
788790

789791
if !status.IsSuccess() {
@@ -951,7 +953,7 @@ func TestPreferredAffinityWithHardPodAffinitySymmetricWeight(t *testing.T) {
951953
ctx, cancel := context.WithCancel(ctx)
952954
defer cancel()
953955
state := framework.NewCycleState()
954-
p := plugintesting.SetupPluginWithInformers(ctx, t, New, &config.InterPodAffinityArgs{HardPodAffinityWeight: test.hardPodAffinityWeight}, cache.NewSnapshot(test.pods, test.nodes), namespaces)
956+
p := plugintesting.SetupPluginWithInformers(ctx, t, schedruntime.FactoryAdapter(feature.Features{}, New), &config.InterPodAffinityArgs{HardPodAffinityWeight: test.hardPodAffinityWeight}, cache.NewSnapshot(test.pods, test.nodes), namespaces)
955957
status := p.(framework.PreScorePlugin).PreScore(ctx, state, test.pod, tf.BuildNodeInfos(test.nodes))
956958
if !test.wantStatus.Equal(status) {
957959
t.Errorf("InterPodAffinity#PreScore() returned unexpected status.Code got: %v, want: %v", status.Code(), test.wantStatus.Code())

pkg/scheduler/framework/plugins/nodeaffinity/node_affinity.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,18 @@ import (
2929
"k8s.io/kubernetes/pkg/scheduler/apis/config"
3030
"k8s.io/kubernetes/pkg/scheduler/apis/config/validation"
3131
"k8s.io/kubernetes/pkg/scheduler/framework"
32+
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/feature"
3233
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/helper"
3334
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
3435
"k8s.io/kubernetes/pkg/scheduler/util"
3536
)
3637

3738
// NodeAffinity is a plugin that checks if a pod node selector matches the node label.
3839
type NodeAffinity struct {
39-
handle framework.Handle
40-
addedNodeSelector *nodeaffinity.NodeSelector
41-
addedPrefSchedTerms *nodeaffinity.PreferredSchedulingTerms
40+
handle framework.Handle
41+
addedNodeSelector *nodeaffinity.NodeSelector
42+
addedPrefSchedTerms *nodeaffinity.PreferredSchedulingTerms
43+
enableSchedulingQueueHint bool
4244
}
4345

4446
var _ framework.PreFilterPlugin = &NodeAffinity{}
@@ -84,8 +86,18 @@ func (s *preFilterState) Clone() framework.StateData {
8486
// EventsToRegister returns the possible events that may make a Pod
8587
// failed by this plugin schedulable.
8688
func (pl *NodeAffinity) EventsToRegister(_ context.Context) ([]framework.ClusterEventWithHint, error) {
89+
// A note about UpdateNodeTaint event:
90+
// Ideally, it's supposed to register only Add | UpdateNodeLabel because UpdateNodeTaint will never change the result from this plugin.
91+
// But, we may miss Node/Add event due to preCheck, and we decided to register UpdateNodeTaint | UpdateNodeLabel for all plugins registering Node/Add.
92+
// See: https://github.com/kubernetes/kubernetes/issues/109437
93+
nodeActionType := framework.Add | framework.UpdateNodeLabel | framework.UpdateNodeTaint
94+
if pl.enableSchedulingQueueHint {
95+
// preCheck is not used when QHint is enabled, and hence we can use UpdateNodeLabel instead of Update.
96+
nodeActionType = framework.Add | framework.UpdateNodeLabel
97+
}
98+
8799
return []framework.ClusterEventWithHint{
88-
{Event: framework.ClusterEvent{Resource: framework.Node, ActionType: framework.Add | framework.Update}, QueueingHintFn: pl.isSchedulableAfterNodeChange},
100+
{Event: framework.ClusterEvent{Resource: framework.Node, ActionType: nodeActionType}, QueueingHintFn: pl.isSchedulableAfterNodeChange},
89101
}, nil
90102
}
91103

@@ -279,13 +291,14 @@ func (pl *NodeAffinity) ScoreExtensions() framework.ScoreExtensions {
279291
}
280292

281293
// New initializes a new plugin and returns it.
282-
func New(_ context.Context, plArgs runtime.Object, h framework.Handle) (framework.Plugin, error) {
294+
func New(_ context.Context, plArgs runtime.Object, h framework.Handle, fts feature.Features) (framework.Plugin, error) {
283295
args, err := getArgs(plArgs)
284296
if err != nil {
285297
return nil, err
286298
}
287299
pl := &NodeAffinity{
288-
handle: h,
300+
handle: h,
301+
enableSchedulingQueueHint: fts.EnableSchedulingQueueHint,
289302
}
290303
if args.AddedAffinity != nil {
291304
if ns := args.AddedAffinity.RequiredDuringSchedulingIgnoredDuringExecution; ns != nil {

pkg/scheduler/framework/plugins/nodeaffinity/node_affinity_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"k8s.io/kubernetes/pkg/scheduler/apis/config"
3131
"k8s.io/kubernetes/pkg/scheduler/backend/cache"
3232
"k8s.io/kubernetes/pkg/scheduler/framework"
33+
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/feature"
3334
"k8s.io/kubernetes/pkg/scheduler/framework/runtime"
3435
st "k8s.io/kubernetes/pkg/scheduler/testing"
3536
tf "k8s.io/kubernetes/pkg/scheduler/testing/framework"
@@ -907,7 +908,7 @@ func TestNodeAffinity(t *testing.T) {
907908
nodeInfo := framework.NewNodeInfo()
908909
nodeInfo.SetNode(&node)
909910

910-
p, err := New(ctx, &test.args, nil)
911+
p, err := New(ctx, &test.args, nil, feature.Features{})
911912
if err != nil {
912913
t.Fatalf("Creating plugin: %v", err)
913914
}
@@ -1192,7 +1193,7 @@ func TestNodeAffinityPriority(t *testing.T) {
11921193

11931194
state := framework.NewCycleState()
11941195
fh, _ := runtime.NewFramework(ctx, nil, nil, runtime.WithSnapshotSharedLister(cache.NewSnapshot(nil, test.nodes)))
1195-
p, err := New(ctx, &test.args, fh)
1196+
p, err := New(ctx, &test.args, fh, feature.Features{})
11961197
if err != nil {
11971198
t.Fatalf("Creating plugin: %v", err)
11981199
}
@@ -1345,7 +1346,7 @@ func Test_isSchedulableAfterNodeChange(t *testing.T) {
13451346
for name, tc := range testcases {
13461347
t.Run(name, func(t *testing.T) {
13471348
logger, ctx := ktesting.NewTestContext(t)
1348-
p, err := New(ctx, tc.args, nil)
1349+
p, err := New(ctx, tc.args, nil, feature.Features{})
13491350
if err != nil {
13501351
t.Fatalf("Creating plugin: %v", err)
13511352
}

0 commit comments

Comments
 (0)