Skip to content

Commit 9c25b16

Browse files
authored
Merge pull request kubernetes#84099 from draveness/feature/remove-lister-wrapper
feat(scheduler): replace several algorithm listers with client listers
2 parents 7e53c9d + ce33fcc commit 9c25b16

File tree

16 files changed

+186
-116
lines changed

16 files changed

+186
-116
lines changed

pkg/scheduler/algorithm/BUILD

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@ go_library(
1111
],
1212
importpath = "k8s.io/kubernetes/pkg/scheduler/algorithm",
1313
deps = [
14+
"//pkg/apis/apps:go_default_library",
1415
"//pkg/scheduler/api:go_default_library",
1516
"//pkg/scheduler/apis/extender/v1:go_default_library",
1617
"//pkg/scheduler/nodeinfo:go_default_library",
1718
"//staging/src/k8s.io/api/apps/v1:go_default_library",
1819
"//staging/src/k8s.io/api/core/v1:go_default_library",
19-
"//staging/src/k8s.io/api/policy/v1beta1:go_default_library",
2020
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
21+
"//staging/src/k8s.io/client-go/listers/apps/v1:go_default_library",
22+
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
2123
],
2224
)
2325

pkg/scheduler/algorithm/predicates/predicates.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,7 +1050,7 @@ func (n *NodeLabelChecker) CheckNodeLabelPresence(pod *v1.Pod, meta PredicateMet
10501050
// ServiceAffinity defines a struct used for creating service affinity predicates.
10511051
type ServiceAffinity struct {
10521052
podLister algorithm.PodLister
1053-
serviceLister algorithm.ServiceLister
1053+
serviceLister corelisters.ServiceLister
10541054
nodeInfo NodeInfo
10551055
labels []string
10561056
}
@@ -1082,7 +1082,7 @@ func (s *ServiceAffinity) serviceAffinityMetadataProducer(pm *predicateMetadata)
10821082
}
10831083

10841084
// NewServiceAffinityPredicate creates a ServiceAffinity.
1085-
func NewServiceAffinityPredicate(podLister algorithm.PodLister, serviceLister algorithm.ServiceLister, nodeInfo NodeInfo, labels []string) (FitPredicate, predicateMetadataProducer) {
1085+
func NewServiceAffinityPredicate(podLister algorithm.PodLister, serviceLister corelisters.ServiceLister, nodeInfo NodeInfo, labels []string) (FitPredicate, predicateMetadataProducer) {
10861086
affinity := &ServiceAffinity{
10871087
podLister: podLister,
10881088
serviceLister: serviceLister,

pkg/scheduler/algorithm/priorities/BUILD

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ go_library(
4747
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
4848
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
4949
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
50+
"//staging/src/k8s.io/client-go/listers/apps/v1:go_default_library",
51+
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
5052
"//staging/src/k8s.io/client-go/util/workqueue:go_default_library",
5153
"//vendor/k8s.io/klog:go_default_library",
5254
],
@@ -86,6 +88,8 @@ go_test(
8688
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
8789
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
8890
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
91+
"//staging/src/k8s.io/client-go/informers:go_default_library",
92+
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
8993
"//staging/src/k8s.io/component-base/featuregate/testing:go_default_library",
9094
"//vendor/github.com/stretchr/testify/assert:go_default_library",
9195
],

pkg/scheduler/algorithm/priorities/metadata.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,26 @@ import (
2020
v1 "k8s.io/api/core/v1"
2121
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2222
"k8s.io/apimachinery/pkg/labels"
23-
"k8s.io/kubernetes/pkg/scheduler/algorithm"
23+
appslisters "k8s.io/client-go/listers/apps/v1"
24+
corelisters "k8s.io/client-go/listers/core/v1"
2425
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
2526
)
2627

2728
// PriorityMetadataFactory is a factory to produce PriorityMetadata.
2829
type PriorityMetadataFactory struct {
29-
serviceLister algorithm.ServiceLister
30-
controllerLister algorithm.ControllerLister
31-
replicaSetLister algorithm.ReplicaSetLister
32-
statefulSetLister algorithm.StatefulSetLister
30+
serviceLister corelisters.ServiceLister
31+
controllerLister corelisters.ReplicationControllerLister
32+
replicaSetLister appslisters.ReplicaSetLister
33+
statefulSetLister appslisters.StatefulSetLister
3334
}
3435

3536
// NewPriorityMetadataFactory creates a PriorityMetadataFactory.
36-
func NewPriorityMetadataFactory(serviceLister algorithm.ServiceLister, controllerLister algorithm.ControllerLister, replicaSetLister algorithm.ReplicaSetLister, statefulSetLister algorithm.StatefulSetLister) PriorityMetadataProducer {
37+
func NewPriorityMetadataFactory(
38+
serviceLister corelisters.ServiceLister,
39+
controllerLister corelisters.ReplicationControllerLister,
40+
replicaSetLister appslisters.ReplicaSetLister,
41+
statefulSetLister appslisters.StatefulSetLister,
42+
) PriorityMetadataProducer {
3743
factory := &PriorityMetadataFactory{
3844
serviceLister: serviceLister,
3945
controllerLister: controllerLister,
@@ -72,15 +78,15 @@ func (pmf *PriorityMetadataFactory) PriorityMetadata(pod *v1.Pod, nodeNameToInfo
7278
}
7379

7480
// getFirstServiceSelector returns one selector of services the given pod.
75-
func getFirstServiceSelector(pod *v1.Pod, sl algorithm.ServiceLister) (firstServiceSelector labels.Selector) {
81+
func getFirstServiceSelector(pod *v1.Pod, sl corelisters.ServiceLister) (firstServiceSelector labels.Selector) {
7682
if services, err := sl.GetPodServices(pod); err == nil && len(services) > 0 {
7783
return labels.SelectorFromSet(services[0].Spec.Selector)
7884
}
7985
return nil
8086
}
8187

8288
// getSelectors returns selectors of services, RCs and RSs matching the given pod.
83-
func getSelectors(pod *v1.Pod, sl algorithm.ServiceLister, cl algorithm.ControllerLister, rsl algorithm.ReplicaSetLister, ssl algorithm.StatefulSetLister) []labels.Selector {
89+
func getSelectors(pod *v1.Pod, sl corelisters.ServiceLister, cl corelisters.ReplicationControllerLister, rsl appslisters.ReplicaSetLister, ssl appslisters.StatefulSetLister) []labels.Selector {
8490
var selectors []labels.Selector
8591

8692
if services, err := sl.GetPodServices(pod); err == nil {

pkg/scheduler/algorithm/priorities/metadata_test.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ import (
2020
"reflect"
2121
"testing"
2222

23-
apps "k8s.io/api/apps/v1"
2423
v1 "k8s.io/api/core/v1"
2524
"k8s.io/apimachinery/pkg/api/resource"
2625
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26+
"k8s.io/client-go/informers"
27+
clientsetfake "k8s.io/client-go/kubernetes/fake"
2728
priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util"
2829
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
29-
schedulertesting "k8s.io/kubernetes/pkg/scheduler/testing"
3030
)
3131

3232
func TestPriorityMetadata(t *testing.T) {
@@ -162,11 +162,15 @@ func TestPriorityMetadata(t *testing.T) {
162162
name: "Produce a priorityMetadata with specified requests",
163163
},
164164
}
165+
client := clientsetfake.NewSimpleClientset()
166+
informerFactory := informers.NewSharedInformerFactory(client, 0)
167+
165168
metaDataProducer := NewPriorityMetadataFactory(
166-
schedulertesting.FakeServiceLister([]*v1.Service{}),
167-
schedulertesting.FakeControllerLister([]*v1.ReplicationController{}),
168-
schedulertesting.FakeReplicaSetLister([]*apps.ReplicaSet{}),
169-
schedulertesting.FakeStatefulSetLister([]*apps.StatefulSet{}))
169+
informerFactory.Core().V1().Services().Lister(),
170+
informerFactory.Core().V1().ReplicationControllers().Lister(),
171+
informerFactory.Apps().V1().ReplicaSets().Lister(),
172+
informerFactory.Apps().V1().StatefulSets().Lister(),
173+
)
170174
for _, test := range tests {
171175
t.Run(test.name, func(t *testing.T) {
172176
ptData := metaDataProducer(test.pod, nil)

pkg/scheduler/algorithm/priorities/selector_spreading.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import (
2121

2222
v1 "k8s.io/api/core/v1"
2323
"k8s.io/apimachinery/pkg/labels"
24+
appslisters "k8s.io/client-go/listers/apps/v1"
25+
corelisters "k8s.io/client-go/listers/core/v1"
2426
"k8s.io/kubernetes/pkg/scheduler/algorithm"
2527
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
2628
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
@@ -35,18 +37,18 @@ const zoneWeighting float64 = 2.0 / 3.0
3537

3638
// SelectorSpread contains information to calculate selector spread priority.
3739
type SelectorSpread struct {
38-
serviceLister algorithm.ServiceLister
39-
controllerLister algorithm.ControllerLister
40-
replicaSetLister algorithm.ReplicaSetLister
41-
statefulSetLister algorithm.StatefulSetLister
40+
serviceLister corelisters.ServiceLister
41+
controllerLister corelisters.ReplicationControllerLister
42+
replicaSetLister appslisters.ReplicaSetLister
43+
statefulSetLister appslisters.StatefulSetLister
4244
}
4345

4446
// NewSelectorSpreadPriority creates a SelectorSpread.
4547
func NewSelectorSpreadPriority(
46-
serviceLister algorithm.ServiceLister,
47-
controllerLister algorithm.ControllerLister,
48-
replicaSetLister algorithm.ReplicaSetLister,
49-
statefulSetLister algorithm.StatefulSetLister) (PriorityMapFunction, PriorityReduceFunction) {
48+
serviceLister corelisters.ServiceLister,
49+
controllerLister corelisters.ReplicationControllerLister,
50+
replicaSetLister appslisters.ReplicaSetLister,
51+
statefulSetLister appslisters.StatefulSetLister) (PriorityMapFunction, PriorityReduceFunction) {
5052
selectorSpread := &SelectorSpread{
5153
serviceLister: serviceLister,
5254
controllerLister: controllerLister,
@@ -154,12 +156,12 @@ func (s *SelectorSpread) CalculateSpreadPriorityReduce(pod *v1.Pod, meta interfa
154156
// ServiceAntiAffinity contains information to calculate service anti-affinity priority.
155157
type ServiceAntiAffinity struct {
156158
podLister algorithm.PodLister
157-
serviceLister algorithm.ServiceLister
159+
serviceLister corelisters.ServiceLister
158160
label string
159161
}
160162

161163
// NewServiceAntiAffinityPriority creates a ServiceAntiAffinity.
162-
func NewServiceAntiAffinityPriority(podLister algorithm.PodLister, serviceLister algorithm.ServiceLister, label string) (PriorityMapFunction, PriorityReduceFunction) {
164+
func NewServiceAntiAffinityPriority(podLister algorithm.PodLister, serviceLister corelisters.ServiceLister, label string) (PriorityMapFunction, PriorityReduceFunction) {
163165
antiAffinity := &ServiceAntiAffinity{
164166
podLister: podLister,
165167
serviceLister: serviceLister,

pkg/scheduler/algorithm/types.go

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@ limitations under the License.
1717
package algorithm
1818

1919
import (
20-
apps "k8s.io/api/apps/v1"
21-
"k8s.io/api/core/v1"
22-
policyv1beta1 "k8s.io/api/policy/v1beta1"
20+
appsv1 "k8s.io/api/apps/v1"
21+
v1 "k8s.io/api/core/v1"
2322
"k8s.io/apimachinery/pkg/labels"
23+
appslisters "k8s.io/client-go/listers/apps/v1"
24+
corelisters "k8s.io/client-go/listers/core/v1"
25+
"k8s.io/kubernetes/pkg/apis/apps"
2426
schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
2527
)
2628

@@ -43,35 +45,7 @@ type PodLister interface {
4345
FilteredList(podFilter PodFilter, selector labels.Selector) ([]*v1.Pod, error)
4446
}
4547

46-
// ServiceLister interface represents anything that can produce a list of services; the list is consumed by a scheduler.
47-
type ServiceLister interface {
48-
// Lists all the services
49-
List(labels.Selector) ([]*v1.Service, error)
50-
// Gets the services for the given pod
51-
GetPodServices(*v1.Pod) ([]*v1.Service, error)
52-
}
53-
54-
// ControllerLister interface represents anything that can produce a list of ReplicationController; the list is consumed by a scheduler.
55-
type ControllerLister interface {
56-
// Lists all the replication controllers
57-
List(labels.Selector) ([]*v1.ReplicationController, error)
58-
// Gets the replication controller for the given pod
59-
GetPodControllers(*v1.Pod) ([]*v1.ReplicationController, error)
60-
}
61-
62-
// ReplicaSetLister interface represents anything that can produce a list of ReplicaSet; the list is consumed by a scheduler.
63-
type ReplicaSetLister interface {
64-
// Gets the replicasets for the given pod
65-
GetPodReplicaSets(*v1.Pod) ([]*apps.ReplicaSet, error)
66-
}
67-
68-
// PDBLister interface represents anything that can list PodDisruptionBudget objects.
69-
type PDBLister interface {
70-
// List all the PodDisruptionBudgets matching the selector
71-
List(labels.Selector) ([]*policyv1beta1.PodDisruptionBudget, error)
72-
}
73-
74-
var _ ControllerLister = &EmptyControllerLister{}
48+
var _ corelisters.ReplicationControllerLister = &EmptyControllerLister{}
7549

7650
// EmptyControllerLister implements ControllerLister on []v1.ReplicationController returning empty data
7751
type EmptyControllerLister struct{}
@@ -86,28 +60,53 @@ func (f EmptyControllerLister) GetPodControllers(pod *v1.Pod) (controllers []*v1
8660
return nil, nil
8761
}
8862

89-
var _ ReplicaSetLister = &EmptyReplicaSetLister{}
63+
// ReplicationControllers returns nil
64+
func (f EmptyControllerLister) ReplicationControllers(namespace string) corelisters.ReplicationControllerNamespaceLister {
65+
return nil
66+
}
67+
68+
var _ appslisters.ReplicaSetLister = &EmptyReplicaSetLister{}
9069

9170
// EmptyReplicaSetLister implements ReplicaSetLister on []extensions.ReplicaSet returning empty data
9271
type EmptyReplicaSetLister struct{}
9372

73+
// List returns nil
74+
func (f EmptyReplicaSetLister) List(labels.Selector) ([]*appsv1.ReplicaSet, error) {
75+
return nil, nil
76+
}
77+
9478
// GetPodReplicaSets returns nil
95-
func (f EmptyReplicaSetLister) GetPodReplicaSets(pod *v1.Pod) (rss []*apps.ReplicaSet, err error) {
79+
func (f EmptyReplicaSetLister) GetPodReplicaSets(pod *v1.Pod) (rss []*appsv1.ReplicaSet, err error) {
9680
return nil, nil
9781
}
9882

83+
// ReplicaSets returns nil
84+
func (f EmptyReplicaSetLister) ReplicaSets(namespace string) appslisters.ReplicaSetNamespaceLister {
85+
return nil
86+
}
87+
9988
// StatefulSetLister interface represents anything that can produce a list of StatefulSet; the list is consumed by a scheduler.
10089
type StatefulSetLister interface {
10190
// Gets the StatefulSet for the given pod.
10291
GetPodStatefulSets(*v1.Pod) ([]*apps.StatefulSet, error)
10392
}
10493

105-
var _ StatefulSetLister = &EmptyStatefulSetLister{}
94+
var _ appslisters.StatefulSetLister = &EmptyStatefulSetLister{}
10695

10796
// EmptyStatefulSetLister implements StatefulSetLister on []apps.StatefulSet returning empty data.
10897
type EmptyStatefulSetLister struct{}
10998

99+
// List returns nil
100+
func (f EmptyStatefulSetLister) List(labels.Selector) ([]*appsv1.StatefulSet, error) {
101+
return nil, nil
102+
}
103+
110104
// GetPodStatefulSets of EmptyStatefulSetLister returns nil.
111-
func (f EmptyStatefulSetLister) GetPodStatefulSets(pod *v1.Pod) (sss []*apps.StatefulSet, err error) {
105+
func (f EmptyStatefulSetLister) GetPodStatefulSets(pod *v1.Pod) (sss []*appsv1.StatefulSet, err error) {
112106
return nil, nil
113107
}
108+
109+
// StatefulSets returns nil
110+
func (f EmptyStatefulSetLister) StatefulSets(namespace string) appslisters.StatefulSetNamespaceLister {
111+
return nil
112+
}

pkg/scheduler/algorithm_factory.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ import (
2424
"sync"
2525

2626
"k8s.io/apimachinery/pkg/util/sets"
27+
appslisters "k8s.io/client-go/listers/apps/v1"
28+
corelisters "k8s.io/client-go/listers/core/v1"
29+
policylisters "k8s.io/client-go/listers/policy/v1beta1"
2730
"k8s.io/kubernetes/pkg/scheduler/algorithm"
2831
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
2932
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
@@ -37,11 +40,11 @@ import (
3740
// PluginFactoryArgs are passed to all plugin factory functions.
3841
type PluginFactoryArgs struct {
3942
PodLister algorithm.PodLister
40-
ServiceLister algorithm.ServiceLister
41-
ControllerLister algorithm.ControllerLister
42-
ReplicaSetLister algorithm.ReplicaSetLister
43-
StatefulSetLister algorithm.StatefulSetLister
44-
PDBLister algorithm.PDBLister
43+
ServiceLister corelisters.ServiceLister
44+
ControllerLister corelisters.ReplicationControllerLister
45+
ReplicaSetLister appslisters.ReplicaSetLister
46+
StatefulSetLister appslisters.StatefulSetLister
47+
PDBLister policylisters.PodDisruptionBudgetLister
4548
NodeInfo predicates.NodeInfo
4649
CSINodeInfo predicates.CSINodeInfo
4750
PVInfo predicates.PersistentVolumeInfo

pkg/scheduler/core/BUILD

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ go_library(
3131
"//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library",
3232
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
3333
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
34+
"//staging/src/k8s.io/client-go/listers/policy/v1beta1:go_default_library",
3435
"//staging/src/k8s.io/client-go/rest:go_default_library",
3536
"//staging/src/k8s.io/client-go/util/workqueue:go_default_library",
3637
"//vendor/k8s.io/klog:go_default_library",
@@ -60,7 +61,6 @@ go_test(
6061
"//pkg/scheduler/nodeinfo:go_default_library",
6162
"//pkg/scheduler/testing:go_default_library",
6263
"//pkg/scheduler/util:go_default_library",
63-
"//staging/src/k8s.io/api/apps/v1:go_default_library",
6464
"//staging/src/k8s.io/api/core/v1:go_default_library",
6565
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
6666
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
@@ -69,6 +69,8 @@ go_test(
6969
"//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library",
7070
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
7171
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
72+
"//staging/src/k8s.io/client-go/informers:go_default_library",
73+
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
7274
],
7375
)
7476

pkg/scheduler/core/extender_test.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ import (
2929
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3030
"k8s.io/apimachinery/pkg/util/sets"
3131
"k8s.io/apimachinery/pkg/util/wait"
32+
"k8s.io/client-go/informers"
33+
clientsetfake "k8s.io/client-go/kubernetes/fake"
3234
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
3335
"k8s.io/kubernetes/pkg/scheduler/algorithm"
3436
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
@@ -39,7 +41,6 @@ import (
3941
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
4042
internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue"
4143
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
42-
schedulertesting "k8s.io/kubernetes/pkg/scheduler/testing"
4344
"k8s.io/kubernetes/pkg/scheduler/util"
4445
)
4546

@@ -533,6 +534,9 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
533534

534535
for _, test := range tests {
535536
t.Run(test.name, func(t *testing.T) {
537+
client := clientsetfake.NewSimpleClientset()
538+
informerFactory := informers.NewSharedInformerFactory(client, 0)
539+
536540
extenders := []algorithm.SchedulerExtender{}
537541
for ii := range test.extenders {
538542
extenders = append(extenders, &test.extenders[ii])
@@ -552,8 +556,8 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
552556
emptyFramework,
553557
extenders,
554558
nil,
555-
schedulertesting.FakePersistentVolumeClaimLister{},
556-
schedulertesting.FakePDBLister{},
559+
informerFactory.Core().V1().PersistentVolumeClaims().Lister(),
560+
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
557561
false,
558562
false,
559563
schedulerapi.DefaultPercentageOfNodesToScore,

0 commit comments

Comments
 (0)