Skip to content

Commit 8a6b916

Browse files
authored
Merge pull request kubernetes#130720 from saintube/scheduler-expose-nodeinfo-in-prefilter
Expose NodeInfo to PreFilter plugins
2 parents 13dd327 + 8dc6806 commit 8a6b916

File tree

31 files changed

+118
-77
lines changed

31 files changed

+118
-77
lines changed

cmd/kube-scheduler/app/server_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,7 @@ func newFoo(_ context.Context, _ runtime.Object, _ framework.Handle) (framework.
514514
return &foo{}, nil
515515
}
516516

517-
func (*foo) PreFilter(_ context.Context, _ *framework.CycleState, _ *v1.Pod) (*framework.PreFilterResult, *framework.Status) {
517+
func (*foo) PreFilter(_ context.Context, _ *framework.CycleState, _ *v1.Pod, _ []*framework.NodeInfo) (*framework.PreFilterResult, *framework.Status) {
518518
return nil, nil
519519
}
520520

pkg/scheduler/extender_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@ func TestSchedulerWithExtenders(t *testing.T) {
343343
runtime.WithInformerFactory(informerFactory),
344344
runtime.WithPodNominator(internalqueue.NewSchedulingQueue(nil, informerFactory)),
345345
runtime.WithLogger(logger),
346+
runtime.WithSnapshotSharedLister(emptySnapshot),
346347
)
347348
if err != nil {
348349
t.Fatal(err)

pkg/scheduler/framework/interface.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,7 @@ type PreFilterPlugin interface {
520520
//
521521
// When it returns Skip status, returned PreFilterResult and other fields in status are just ignored,
522522
// and coupled Filter plugin/PreFilterExtensions() will be skipped in this scheduling cycle.
523-
PreFilter(ctx context.Context, state *CycleState, p *v1.Pod) (*PreFilterResult, *Status)
523+
PreFilter(ctx context.Context, state *CycleState, p *v1.Pod, nodes []*NodeInfo) (*PreFilterResult, *Status)
524524
// PreFilterExtensions returns a PreFilterExtensions interface if the plugin implements one,
525525
// or nil if it does not. A Pre-filter plugin can provide extensions to incrementally
526526
// modify its pre-processed info. The framework guarantees that the extensions

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ func (pl *TestPlugin) PreFilterExtensions() framework.PreFilterExtensions {
144144
return pl
145145
}
146146

147-
func (pl *TestPlugin) PreFilter(ctx context.Context, state *framework.CycleState, p *v1.Pod) (*framework.PreFilterResult, *framework.Status) {
147+
func (pl *TestPlugin) PreFilter(ctx context.Context, state *framework.CycleState, p *v1.Pod, nodes []*framework.NodeInfo) (*framework.PreFilterResult, *framework.Status) {
148148
return nil, nil
149149
}
150150

@@ -1430,16 +1430,16 @@ func TestSelectBestCandidate(t *testing.T) {
14301430
if err != nil {
14311431
t.Fatal(err)
14321432
}
1433+
nodeInfos, err := fwk.SnapshotSharedLister().NodeInfos().List()
1434+
if err != nil {
1435+
t.Fatal(err)
1436+
}
14331437

14341438
state := framework.NewCycleState()
14351439
// Some tests rely on PreFilter plugin to compute its CycleState.
14361440
if _, status, _ := fwk.RunPreFilterPlugins(ctx, state, tt.pod); !status.IsSuccess() {
14371441
t.Errorf("Unexpected PreFilter Status: %v", status)
14381442
}
1439-
nodeInfos, err := snapshot.NodeInfos().List()
1440-
if err != nil {
1441-
t.Fatal(err)
1442-
}
14431443

14441444
pl := &DefaultPreemption{
14451445
fh: fwk,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ func (pl *DynamicResources) foreachPodResourceClaim(pod *v1.Pod, cb func(podReso
348348
// PreFilter invoked at the prefilter extension point to check if pod has all
349349
// immediate claims bound. UnschedulableAndUnresolvable is returned if
350350
// the pod cannot be scheduled at the moment on any node.
351-
func (pl *DynamicResources) PreFilter(ctx context.Context, state *framework.CycleState, pod *v1.Pod) (*framework.PreFilterResult, *framework.Status) {
351+
func (pl *DynamicResources) PreFilter(ctx context.Context, state *framework.CycleState, pod *v1.Pod, nodes []*framework.NodeInfo) (*framework.PreFilterResult, *framework.Status) {
352352
if !pl.enabled {
353353
return nil, framework.NewStatus(framework.Skip)
354354
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1001,7 +1001,7 @@ func TestPlugin(t *testing.T) {
10011001
return
10021002
}
10031003

1004-
result, status := testCtx.p.PreFilter(testCtx.ctx, testCtx.state, tc.pod)
1004+
result, status := testCtx.p.PreFilter(testCtx.ctx, testCtx.state, tc.pod, nil)
10051005
t.Run("prefilter", func(t *testing.T) {
10061006
assert.Equal(t, tc.want.preFilterResult, result)
10071007
testCtx.verify(t, tc.want.prefilter, initialObjects, result, status)

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -270,13 +270,9 @@ func (pl *InterPodAffinity) getIncomingAffinityAntiAffinityCounts(ctx context.Co
270270
}
271271

272272
// PreFilter invoked at the prefilter extension point.
273-
func (pl *InterPodAffinity) PreFilter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod) (*framework.PreFilterResult, *framework.Status) {
274-
var allNodes []*framework.NodeInfo
273+
func (pl *InterPodAffinity) PreFilter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, allNodes []*framework.NodeInfo) (*framework.PreFilterResult, *framework.Status) {
275274
var nodesWithRequiredAntiAffinityPods []*framework.NodeInfo
276275
var err error
277-
if allNodes, err = pl.sharedLister.NodeInfos().List(); err != nil {
278-
return nil, framework.AsStatus(fmt.Errorf("failed to list NodeInfos: %w", err))
279-
}
280276
if nodesWithRequiredAntiAffinityPods, err = pl.sharedLister.NodeInfos().HavePodsWithRequiredAntiAffinityList(); err != nil {
281277
return nil, framework.AsStatus(fmt.Errorf("failed to list NodeInfos with pods with affinity: %w", err))
282278
}

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -551,9 +551,13 @@ func TestRequiredAffinitySingleNode(t *testing.T) {
551551
ctx, cancel := context.WithCancel(ctx)
552552
defer cancel()
553553
snapshot := cache.NewSnapshot(test.pods, []*v1.Node{test.node})
554+
nodeInfos, err := snapshot.NodeInfos().List()
555+
if err != nil {
556+
t.Fatal(err)
557+
}
554558
p := plugintesting.SetupPluginWithInformers(ctx, t, schedruntime.FactoryAdapter(feature.Features{}, New), &config.InterPodAffinityArgs{}, snapshot, namespaces)
555559
state := framework.NewCycleState()
556-
_, preFilterStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, state, test.pod)
560+
_, preFilterStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, state, test.pod, nodeInfos)
557561
if diff := cmp.Diff(test.wantPreFilterStatus, preFilterStatus); diff != "" {
558562
t.Errorf("PreFilter: status does not match (-want,+got):\n%s", diff)
559563
}
@@ -963,12 +967,16 @@ func TestRequiredAffinityMultipleNodes(t *testing.T) {
963967
ctx, cancel := context.WithCancel(ctx)
964968
defer cancel()
965969
snapshot := cache.NewSnapshot(test.pods, test.nodes)
970+
nodeInfos, err := snapshot.NodeInfos().List()
971+
if err != nil {
972+
t.Fatal(err)
973+
}
966974
p := plugintesting.SetupPluginWithInformers(ctx, t, schedruntime.FactoryAdapter(feature.Features{}, New), &config.InterPodAffinityArgs{}, snapshot,
967975
[]runtime.Object{
968976
&v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: "NS1"}},
969977
})
970978
state := framework.NewCycleState()
971-
_, preFilterStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, state, test.pod)
979+
_, preFilterStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, state, test.pod, nodeInfos)
972980
if diff := cmp.Diff(test.wantPreFilterStatus, preFilterStatus); diff != "" {
973981
t.Errorf("PreFilter: status does not match (-want,+got):\n%s", diff)
974982
}
@@ -1239,9 +1247,13 @@ func TestPreFilterStateAddRemovePod(t *testing.T) {
12391247
_, ctx := ktesting.NewTestContext(t)
12401248
ctx, cancel := context.WithCancel(ctx)
12411249
defer cancel()
1250+
nodeInfos, err := snapshot.NodeInfos().List()
1251+
if err != nil {
1252+
t.Fatal(err)
1253+
}
12421254
p := plugintesting.SetupPluginWithInformers(ctx, t, schedruntime.FactoryAdapter(feature.Features{}, New), &config.InterPodAffinityArgs{}, snapshot, nil)
12431255
cycleState := framework.NewCycleState()
1244-
_, preFilterStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, cycleState, test.pendingPod)
1256+
_, preFilterStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, cycleState, test.pendingPod, nodeInfos)
12451257
if !preFilterStatus.IsSuccess() {
12461258
t.Errorf("prefilter failed with status: %v", preFilterStatus)
12471259
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ func (pl *NodeAffinity) isSchedulableAfterNodeChange(logger klog.Logger, pod *v1
143143
}
144144

145145
// PreFilter builds and writes cycle state used by Filter.
146-
func (pl *NodeAffinity) PreFilter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod) (*framework.PreFilterResult, *framework.Status) {
146+
func (pl *NodeAffinity) PreFilter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodes []*framework.NodeInfo) (*framework.PreFilterResult, *framework.Status) {
147147
affinity := pod.Spec.Affinity
148148
noNodeAffinity := (affinity == nil ||
149149
affinity.NodeAffinity == nil ||

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -916,7 +916,7 @@ func TestNodeAffinity(t *testing.T) {
916916
state := framework.NewCycleState()
917917
var gotStatus *framework.Status
918918
if test.runPreFilter {
919-
gotPreFilterResult, gotStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, state, test.pod)
919+
gotPreFilterResult, gotStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, state, test.pod, nil)
920920
if diff := cmp.Diff(test.wantPreFilterStatus, gotStatus); diff != "" {
921921
t.Errorf("unexpected PreFilter Status (-want,+got):\n%s", diff)
922922
}

0 commit comments

Comments
 (0)