Skip to content

Commit 8dc6806

Browse files
saintubeAxeZhanshenxin
committed
Expose NodeInfo to PreFilter plugins and Framework
Co-authored-by: Zhan Sheng <[email protected]> Co-authored-by: shenxin <[email protected]> Signed-off-by: saintube <[email protected]>
1 parent e9a3d99 commit 8dc6806

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
@@ -532,7 +532,7 @@ func newFoo(_ context.Context, _ runtime.Object, _ framework.Handle) (framework.
532532
return &foo{}, nil
533533
}
534534

535-
func (*foo) PreFilter(_ context.Context, _ *framework.CycleState, _ *v1.Pod) (*framework.PreFilterResult, *framework.Status) {
535+
func (*foo) PreFilter(_ context.Context, _ *framework.CycleState, _ *v1.Pod, _ []*framework.NodeInfo) (*framework.PreFilterResult, *framework.Status) {
536536
return nil, nil
537537
}
538538

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
@@ -140,7 +140,7 @@ func (pl *TestPlugin) PreFilterExtensions() framework.PreFilterExtensions {
140140
return pl
141141
}
142142

143-
func (pl *TestPlugin) PreFilter(ctx context.Context, state *framework.CycleState, p *v1.Pod) (*framework.PreFilterResult, *framework.Status) {
143+
func (pl *TestPlugin) PreFilter(ctx context.Context, state *framework.CycleState, p *v1.Pod, nodes []*framework.NodeInfo) (*framework.PreFilterResult, *framework.Status) {
144144
return nil, nil
145145
}
146146

@@ -1428,16 +1428,16 @@ func TestSelectBestCandidate(t *testing.T) {
14281428
if err != nil {
14291429
t.Fatal(err)
14301430
}
1431+
nodeInfos, err := fwk.SnapshotSharedLister().NodeInfos().List()
1432+
if err != nil {
1433+
t.Fatal(err)
1434+
}
14311435

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

14421442
pl := &DefaultPreemption{
14431443
fh: fwk,

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

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

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -934,7 +934,7 @@ func TestPlugin(t *testing.T) {
934934
return
935935
}
936936

937-
result, status := testCtx.p.PreFilter(testCtx.ctx, testCtx.state, tc.pod)
937+
result, status := testCtx.p.PreFilter(testCtx.ctx, testCtx.state, tc.pod, nil)
938938
t.Run("prefilter", func(t *testing.T) {
939939
assert.Equal(t, tc.want.preFilterResult, result)
940940
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
@@ -548,9 +548,13 @@ func TestRequiredAffinitySingleNode(t *testing.T) {
548548
ctx, cancel := context.WithCancel(ctx)
549549
defer cancel()
550550
snapshot := cache.NewSnapshot(test.pods, []*v1.Node{test.node})
551+
nodeInfos, err := snapshot.NodeInfos().List()
552+
if err != nil {
553+
t.Fatal(err)
554+
}
551555
p := plugintesting.SetupPluginWithInformers(ctx, t, schedruntime.FactoryAdapter(feature.Features{}, New), &config.InterPodAffinityArgs{}, snapshot, namespaces)
552556
state := framework.NewCycleState()
553-
_, preFilterStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, state, test.pod)
557+
_, preFilterStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, state, test.pod, nodeInfos)
554558
if diff := cmp.Diff(test.wantPreFilterStatus, preFilterStatus); diff != "" {
555559
t.Errorf("PreFilter: status does not match (-want,+got):\n%s", diff)
556560
}
@@ -960,12 +964,16 @@ func TestRequiredAffinityMultipleNodes(t *testing.T) {
960964
ctx, cancel := context.WithCancel(ctx)
961965
defer cancel()
962966
snapshot := cache.NewSnapshot(test.pods, test.nodes)
967+
nodeInfos, err := snapshot.NodeInfos().List()
968+
if err != nil {
969+
t.Fatal(err)
970+
}
963971
p := plugintesting.SetupPluginWithInformers(ctx, t, schedruntime.FactoryAdapter(feature.Features{}, New), &config.InterPodAffinityArgs{}, snapshot,
964972
[]runtime.Object{
965973
&v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: "NS1"}},
966974
})
967975
state := framework.NewCycleState()
968-
_, preFilterStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, state, test.pod)
976+
_, preFilterStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, state, test.pod, nodeInfos)
969977
if diff := cmp.Diff(test.wantPreFilterStatus, preFilterStatus); diff != "" {
970978
t.Errorf("PreFilter: status does not match (-want,+got):\n%s", diff)
971979
}
@@ -1236,9 +1244,13 @@ func TestPreFilterStateAddRemovePod(t *testing.T) {
12361244
_, ctx := ktesting.NewTestContext(t)
12371245
ctx, cancel := context.WithCancel(ctx)
12381246
defer cancel()
1247+
nodeInfos, err := snapshot.NodeInfos().List()
1248+
if err != nil {
1249+
t.Fatal(err)
1250+
}
12391251
p := plugintesting.SetupPluginWithInformers(ctx, t, schedruntime.FactoryAdapter(feature.Features{}, New), &config.InterPodAffinityArgs{}, snapshot, nil)
12401252
cycleState := framework.NewCycleState()
1241-
_, preFilterStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, cycleState, test.pendingPod)
1253+
_, preFilterStatus := p.(framework.PreFilterPlugin).PreFilter(ctx, cycleState, test.pendingPod, nodeInfos)
12421254
if !preFilterStatus.IsSuccess() {
12431255
t.Errorf("prefilter failed with status: %v", preFilterStatus)
12441256
}

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)