Skip to content

Commit 832a53a

Browse files
author
Adhityaa Chandrasekar
committed
selectorspread: access listers in plugin instantiation
1 parent 205d5c5 commit 832a53a

File tree

4 files changed

+42
-15
lines changed

4 files changed

+42
-15
lines changed

pkg/scheduler/framework/plugins/selectorspread/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ go_library(
1212
"//staging/src/k8s.io/api/core/v1:go_default_library",
1313
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
1414
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
15+
"//staging/src/k8s.io/client-go/listers/apps/v1:go_default_library",
16+
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
1517
],
1618
)
1719

pkg/scheduler/framework/plugins/selectorspread/selector_spread.go

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,20 @@ import (
2323
v1 "k8s.io/api/core/v1"
2424
"k8s.io/apimachinery/pkg/labels"
2525
"k8s.io/apimachinery/pkg/runtime"
26+
appslisters "k8s.io/client-go/listers/apps/v1"
27+
corelisters "k8s.io/client-go/listers/core/v1"
2628
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/helper"
2729
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
2830
utilnode "k8s.io/kubernetes/pkg/util/node"
2931
)
3032

3133
// SelectorSpread is a plugin that calculates selector spread priority.
3234
type SelectorSpread struct {
33-
handle framework.FrameworkHandle
35+
sharedLister framework.SharedLister
36+
services corelisters.ServiceLister
37+
replicationControllers corelisters.ReplicationControllerLister
38+
replicaSets appslisters.ReplicaSetLister
39+
statefulSets appslisters.StatefulSetLister
3440
}
3541

3642
var _ framework.PreScorePlugin = &SelectorSpread{}
@@ -88,7 +94,7 @@ func (pl *SelectorSpread) Score(ctx context.Context, state *framework.CycleState
8894
return 0, framework.NewStatus(framework.Error, fmt.Sprintf("%+v convert to tainttoleration.preScoreState error", c))
8995
}
9096

91-
nodeInfo, err := pl.handle.SnapshotSharedLister().NodeInfos().Get(nodeName)
97+
nodeInfo, err := pl.sharedLister.NodeInfos().Get(nodeName)
9298
if err != nil {
9399
return 0, framework.NewStatus(framework.Error, fmt.Sprintf("getting node %q from Snapshot: %v", nodeName, err))
94100
}
@@ -115,7 +121,7 @@ func (pl *SelectorSpread) NormalizeScore(ctx context.Context, state *framework.C
115121
if scores[i].Score > maxCountByNodeName {
116122
maxCountByNodeName = scores[i].Score
117123
}
118-
nodeInfo, err := pl.handle.SnapshotSharedLister().NodeInfos().Get(scores[i].Name)
124+
nodeInfo, err := pl.sharedLister.NodeInfos().Get(scores[i].Name)
119125
if err != nil {
120126
return framework.NewStatus(framework.Error, fmt.Sprintf("getting node %q from Snapshot: %v", scores[i].Name, err))
121127
}
@@ -146,7 +152,7 @@ func (pl *SelectorSpread) NormalizeScore(ctx context.Context, state *framework.C
146152
}
147153
// If there is zone information present, incorporate it
148154
if haveZones {
149-
nodeInfo, err := pl.handle.SnapshotSharedLister().NodeInfos().Get(scores[i].Name)
155+
nodeInfo, err := pl.sharedLister.NodeInfos().Get(scores[i].Name)
150156
if err != nil {
151157
return framework.NewStatus(framework.Error, fmt.Sprintf("getting node %q from Snapshot: %v", scores[i].Name, err))
152158
}
@@ -176,13 +182,12 @@ func (pl *SelectorSpread) PreScore(ctx context.Context, cycleState *framework.Cy
176182
return nil
177183
}
178184
var selector labels.Selector
179-
informerFactory := pl.handle.SharedInformerFactory()
180185
selector = helper.DefaultSelector(
181186
pod,
182-
informerFactory.Core().V1().Services().Lister(),
183-
informerFactory.Core().V1().ReplicationControllers().Lister(),
184-
informerFactory.Apps().V1().ReplicaSets().Lister(),
185-
informerFactory.Apps().V1().StatefulSets().Lister(),
187+
pl.services,
188+
pl.replicationControllers,
189+
pl.replicaSets,
190+
pl.statefulSets,
186191
)
187192
state := &preScoreState{
188193
selector: selector,
@@ -193,8 +198,20 @@ func (pl *SelectorSpread) PreScore(ctx context.Context, cycleState *framework.Cy
193198

194199
// New initializes a new plugin and returns it.
195200
func New(_ runtime.Object, handle framework.FrameworkHandle) (framework.Plugin, error) {
201+
sharedLister := handle.SnapshotSharedLister()
202+
if sharedLister == nil {
203+
return nil, fmt.Errorf("SnapshotSharedLister is nil")
204+
}
205+
sharedInformerFactory := handle.SharedInformerFactory()
206+
if sharedInformerFactory == nil {
207+
return nil, fmt.Errorf("SharedInformerFactory is nil")
208+
}
196209
return &SelectorSpread{
197-
handle: handle,
210+
sharedLister: sharedLister,
211+
services: sharedInformerFactory.Core().V1().Services().Lister(),
212+
replicationControllers: sharedInformerFactory.Core().V1().ReplicationControllers().Lister(),
213+
replicaSets: sharedInformerFactory.Apps().V1().ReplicaSets().Lister(),
214+
statefulSets: sharedInformerFactory.Apps().V1().StatefulSets().Lister(),
198215
}, nil
199216
}
200217

pkg/scheduler/framework/plugins/selectorspread/selector_spread_perf_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,11 @@ func BenchmarkTestSelectorSpreadPriority(b *testing.B) {
6969
}
7070
}
7171
fh, _ := runtime.NewFramework(nil, nil, nil, runtime.WithSnapshotSharedLister(snapshot), runtime.WithInformerFactory(informerFactory))
72-
plugin := &SelectorSpread{handle: fh}
72+
pl, err := New(nil, fh)
73+
if err != nil {
74+
b.Fatal(err)
75+
}
76+
plugin := pl.(*SelectorSpread)
7377
b.ResetTimer()
7478

7579
for i := 0; i < b.N; i++ {

pkg/scheduler/framework/plugins/selectorspread/selector_spread_test.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -383,9 +383,11 @@ func TestSelectorSpreadScore(t *testing.T) {
383383

384384
state := framework.NewCycleState()
385385

386-
plugin := &SelectorSpread{
387-
handle: fh,
386+
pl, err := New(nil, fh)
387+
if err != nil {
388+
t.Fatal(err)
388389
}
390+
plugin := pl.(*SelectorSpread)
389391

390392
status := plugin.PreScore(ctx, state, test.pod, nodes)
391393
if !status.IsSuccess() {
@@ -635,9 +637,11 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
635637
t.Errorf("error creating new framework handle: %+v", err)
636638
}
637639

638-
plugin := &SelectorSpread{
639-
handle: fh,
640+
pl, err := New(nil, fh)
641+
if err != nil {
642+
t.Fatal(err)
640643
}
644+
plugin := pl.(*SelectorSpread)
641645

642646
state := framework.NewCycleState()
643647
status := plugin.PreScore(ctx, state, test.pod, nodes)

0 commit comments

Comments
 (0)