Skip to content

Commit 8dd5a34

Browse files
Merge pull request #405 from wangyuqing4/vc-ctrl
clean some redundant job/pg/gc controllers code
2 parents 1a856a1 + e4e871e commit 8dd5a34

10 files changed

Lines changed: 61 additions & 68 deletions

cmd/controllers/app/server.go

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626

2727
"k8s.io/api/core/v1"
2828
"k8s.io/apimachinery/pkg/util/uuid"
29+
"k8s.io/client-go/informers"
2930
clientset "k8s.io/client-go/kubernetes"
3031
"k8s.io/client-go/kubernetes/scheme"
3132
corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
@@ -38,8 +39,6 @@ import (
3839
"k8s.io/client-go/tools/leaderelection/resourcelock"
3940
"k8s.io/client-go/tools/record"
4041

41-
kbver "volcano.sh/volcano/pkg/client/clientset/versioned"
42-
4342
"volcano.sh/volcano/cmd/controllers/app/options"
4443
vkclient "volcano.sh/volcano/pkg/client/clientset/versioned"
4544
"volcano.sh/volcano/pkg/controllers/garbagecollector"
@@ -81,23 +80,7 @@ func Run(opt *options.ServerOption) error {
8180
return err
8281
}
8382

84-
// TODO: add user agent for different controllers
85-
kubeClient := clientset.NewForConfigOrDie(config)
86-
kbClient := kbver.NewForConfigOrDie(config)
87-
vkClient := vkclient.NewForConfigOrDie(config)
88-
89-
jobController := job.NewJobController(kubeClient, kbClient, vkClient, opt.WorkerThreads)
90-
queueController := queue.NewQueueController(kubeClient, kbClient)
91-
garbageCollector := garbagecollector.New(vkClient)
92-
pgController := podgroup.NewPodgroupController(kubeClient, kbClient, opt.SchedulerName)
93-
94-
run := func(ctx context.Context) {
95-
go jobController.Run(ctx.Done())
96-
go queueController.Run(ctx.Done())
97-
go garbageCollector.Run(ctx.Done())
98-
go pgController.Run(ctx.Done())
99-
<-ctx.Done()
100-
}
83+
run := startControllers(config, opt)
10184

10285
if !opt.EnableLeaderElection {
10386
run(context.TODO())
@@ -147,3 +130,24 @@ func Run(opt *options.ServerOption) error {
147130
})
148131
return fmt.Errorf("lost lease")
149132
}
133+
134+
func startControllers(config *rest.Config, opt *options.ServerOption) func(ctx context.Context) {
135+
// TODO: add user agent for different controllers
136+
kubeClient := clientset.NewForConfigOrDie(config)
137+
vkClient := vkclient.NewForConfigOrDie(config)
138+
139+
sharedInformers := informers.NewSharedInformerFactory(kubeClient, 0)
140+
141+
jobController := job.NewJobController(kubeClient, vkClient, sharedInformers, opt.WorkerThreads)
142+
queueController := queue.NewQueueController(kubeClient, vkClient)
143+
garbageCollector := garbagecollector.NewGarbageCollector(vkClient)
144+
pgController := podgroup.NewPodgroupController(kubeClient, vkClient, sharedInformers, opt.SchedulerName)
145+
146+
return func(ctx context.Context) {
147+
go jobController.Run(ctx.Done())
148+
go queueController.Run(ctx.Done())
149+
go garbageCollector.Run(ctx.Done())
150+
go pgController.Run(ctx.Done())
151+
<-ctx.Done()
152+
}
153+
}

pkg/controllers/garbagecollector/garbagecollector.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ type GarbageCollector struct {
5858
queue workqueue.RateLimitingInterface
5959
}
6060

61-
// New creates an instance of GarbageCollector
62-
func New(vkClient vkver.Interface) *GarbageCollector {
61+
// NewGarbageCollector creates an instance of GarbageCollector
62+
func NewGarbageCollector(vkClient vkver.Interface) *GarbageCollector {
6363
jobInformer := vkinfoext.NewSharedInformerFactory(vkClient, 0).Batch().V1alpha1().Jobs()
6464

6565
gb := &GarbageCollector{

pkg/controllers/garbagecollector/garbagecollector_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ func TestGarbageCollector_ProcessTTL(t *testing.T) {
8383
},
8484
}
8585
for i, testcase := range testcases {
86-
gc := New(volcanoclient.NewSimpleClientset())
86+
gc := NewGarbageCollector(volcanoclient.NewSimpleClientset())
8787

8888
expired, err := gc.processTTL(testcase.Job)
8989
if err != nil {

pkg/controllers/job/job_controller.go

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import (
3939
"k8s.io/client-go/tools/record"
4040
"k8s.io/client-go/util/workqueue"
4141

42-
kbver "volcano.sh/volcano/pkg/client/clientset/versioned"
4342
kbinfoext "volcano.sh/volcano/pkg/client/informers/externalversions"
4443
kbinfo "volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1alpha2"
4544
kblister "volcano.sh/volcano/pkg/client/listers/scheduling/v1alpha2"
@@ -61,16 +60,14 @@ import (
6160
type Controller struct {
6261
kubeClients kubernetes.Interface
6362
vkClients vkver.Interface
64-
kbClients kbver.Interface
6563

66-
jobInformer vkbatchinfo.JobInformer
67-
podInformer coreinformers.PodInformer
68-
pvcInformer coreinformers.PersistentVolumeClaimInformer
69-
pgInformer kbinfo.PodGroupInformer
70-
svcInformer coreinformers.ServiceInformer
71-
cmdInformer vkcoreinfo.CommandInformer
72-
pcInformer schedv1.PriorityClassInformer
73-
sharedInformers informers.SharedInformerFactory
64+
jobInformer vkbatchinfo.JobInformer
65+
podInformer coreinformers.PodInformer
66+
pvcInformer coreinformers.PersistentVolumeClaimInformer
67+
pgInformer kbinfo.PodGroupInformer
68+
svcInformer coreinformers.ServiceInformer
69+
cmdInformer vkcoreinfo.CommandInformer
70+
pcInformer schedv1.PriorityClassInformer
7471

7572
// A store of jobs
7673
jobLister vkbatchlister.JobLister
@@ -113,8 +110,8 @@ type Controller struct {
113110
// NewJobController create new Job Controller
114111
func NewJobController(
115112
kubeClient kubernetes.Interface,
116-
kbClient kbver.Interface,
117113
vkClient vkver.Interface,
114+
sharedInformers informers.SharedInformerFactory,
118115
workers uint32,
119116
) *Controller {
120117

@@ -127,7 +124,6 @@ func NewJobController(
127124
cc := &Controller{
128125
kubeClients: kubeClient,
129126
vkClients: vkClient,
130-
kbClients: kbClient,
131127
queueList: make([]workqueue.RateLimitingInterface, workers, workers),
132128
commandQueue: workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()),
133129
cache: jobcache.New(),
@@ -158,8 +154,7 @@ func NewJobController(
158154
cc.cmdLister = cc.cmdInformer.Lister()
159155
cc.cmdSynced = cc.cmdInformer.Informer().HasSynced
160156

161-
cc.sharedInformers = informers.NewSharedInformerFactory(cc.kubeClients, 0)
162-
cc.podInformer = cc.sharedInformers.Core().V1().Pods()
157+
cc.podInformer = sharedInformers.Core().V1().Pods()
163158
cc.podInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
164159
AddFunc: cc.addPod,
165160
UpdateFunc: cc.updatePod,
@@ -169,22 +164,22 @@ func NewJobController(
169164
cc.podLister = cc.podInformer.Lister()
170165
cc.podSynced = cc.podInformer.Informer().HasSynced
171166

172-
cc.pvcInformer = cc.sharedInformers.Core().V1().PersistentVolumeClaims()
167+
cc.pvcInformer = sharedInformers.Core().V1().PersistentVolumeClaims()
173168
cc.pvcLister = cc.pvcInformer.Lister()
174169
cc.pvcSynced = cc.pvcInformer.Informer().HasSynced
175170

176-
cc.svcInformer = cc.sharedInformers.Core().V1().Services()
171+
cc.svcInformer = sharedInformers.Core().V1().Services()
177172
cc.svcLister = cc.svcInformer.Lister()
178173
cc.svcSynced = cc.svcInformer.Informer().HasSynced
179174

180-
cc.pgInformer = kbinfoext.NewSharedInformerFactory(cc.kbClients, 0).Scheduling().V1alpha2().PodGroups()
175+
cc.pgInformer = kbinfoext.NewSharedInformerFactory(cc.vkClients, 0).Scheduling().V1alpha2().PodGroups()
181176
cc.pgInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
182177
UpdateFunc: cc.updatePodGroup,
183178
})
184179
cc.pgLister = cc.pgInformer.Lister()
185180
cc.pgSynced = cc.pgInformer.Informer().HasSynced
186181

187-
cc.pcInformer = cc.sharedInformers.Scheduling().V1beta1().PriorityClasses()
182+
cc.pcInformer = sharedInformers.Scheduling().V1beta1().PriorityClasses()
188183
cc.pcInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
189184
AddFunc: cc.addPriorityClass,
190185
DeleteFunc: cc.deletePriorityClass,
@@ -203,7 +198,6 @@ func NewJobController(
203198
// Run start JobController
204199
func (cc *Controller) Run(stopCh <-chan struct{}) {
205200

206-
go cc.sharedInformers.Start(stopCh)
207201
go cc.jobInformer.Informer().Run(stopCh)
208202
go cc.podInformer.Informer().Run(stopCh)
209203
go cc.pvcInformer.Informer().Run(stopCh)

pkg/controllers/job/job_controller_actions.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ func (cc *Controller) killJob(jobInfo *apis.JobInfo, podRetainPhase state.PhaseM
126126
}
127127

128128
// Delete PodGroup
129-
if err := cc.kbClients.SchedulingV1alpha2().PodGroups(job.Namespace).Delete(job.Name, nil); err != nil {
129+
if err := cc.vkClients.SchedulingV1alpha2().PodGroups(job.Namespace).Delete(job.Name, nil); err != nil {
130130
if !apierrors.IsNotFound(err) {
131131
glog.Errorf("Failed to delete PodGroup of Job %v/%v: %v",
132132
job.Namespace, job.Name, err)
@@ -468,7 +468,7 @@ func (cc *Controller) createPodGroupIfNotExist(job *vkv1.Job) error {
468468
},
469469
}
470470

471-
if _, err = cc.kbClients.SchedulingV1alpha2().PodGroups(job.Namespace).Create(pg); err != nil {
471+
if _, err = cc.vkClients.SchedulingV1alpha2().PodGroups(job.Namespace).Create(pg); err != nil {
472472
if !apierrors.IsAlreadyExists(err) {
473473
glog.V(3).Infof("Failed to create PodGroup for Job <%s/%s>: %v",
474474
job.Namespace, job.Name, err)

pkg/controllers/job/job_controller_actions_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ func TestCreatePodGroupIfNotExistFunc(t *testing.T) {
505505
t.Errorf("Expected return value to be equal to expected: %s, but got: %s", testcase.ExpextVal, err)
506506
}
507507

508-
_, err = fakeController.kbClients.SchedulingV1alpha2().PodGroups(namespace).Get(testcase.Job.Name, metav1.GetOptions{})
508+
_, err = fakeController.vkClients.SchedulingV1alpha2().PodGroups(namespace).Get(testcase.Job.Name, metav1.GetOptions{})
509509
if err != nil {
510510
t.Error("Expected PodGroup to get created, but not created")
511511
}

pkg/controllers/job/job_controller_handler_test.go

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,22 @@ package job
1818

1919
import (
2020
"fmt"
21-
"k8s.io/apimachinery/pkg/types"
22-
"k8s.io/client-go/rest"
2321
"testing"
24-
"volcano.sh/volcano/pkg/apis/helpers"
2522

2623
"k8s.io/api/core/v1"
2724
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
25+
"k8s.io/apimachinery/pkg/types"
2826
"k8s.io/apimachinery/pkg/util/uuid"
27+
"k8s.io/client-go/informers"
2928
kubeclientset "k8s.io/client-go/kubernetes"
29+
"k8s.io/client-go/rest"
30+
3031
vkbatchv1 "volcano.sh/volcano/pkg/apis/batch/v1alpha1"
3132
vkv1 "volcano.sh/volcano/pkg/apis/batch/v1alpha1"
3233
vkbusv1 "volcano.sh/volcano/pkg/apis/bus/v1alpha1"
34+
"volcano.sh/volcano/pkg/apis/helpers"
3335
kbv1 "volcano.sh/volcano/pkg/apis/scheduling/v1alpha2"
34-
kubebatchclient "volcano.sh/volcano/pkg/client/clientset/versioned"
3536
vkclientset "volcano.sh/volcano/pkg/client/clientset/versioned"
36-
//"volcano.sh/volcano/pkg/controllers/job"
3737
)
3838

3939
func newController() *Controller {
@@ -45,23 +45,16 @@ func newController() *Controller {
4545
},
4646
)
4747

48-
kubeBatchClientSet := kubebatchclient.NewForConfigOrDie(&rest.Config{
49-
Host: "",
50-
ContentConfig: rest.ContentConfig{
51-
GroupVersion: &kbv1.SchemeGroupVersion,
52-
},
53-
},
54-
)
55-
56-
config := &rest.Config{
48+
vkclient := vkclientset.NewForConfigOrDie(&rest.Config{
5749
Host: "",
5850
ContentConfig: rest.ContentConfig{
5951
GroupVersion: &vkv1.SchemeGroupVersion,
6052
},
61-
}
53+
})
54+
55+
sharedInformers := informers.NewSharedInformerFactory(kubeClientSet, 0)
6256

63-
vkclient := vkclientset.NewForConfigOrDie(config)
64-
controller := NewJobController(kubeClientSet, kubeBatchClientSet, vkclient, 3)
57+
controller := NewJobController(kubeClientSet, vkclient, sharedInformers, 3)
6558

6659
return controller
6760
}

pkg/controllers/job/job_controller_plugins_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,20 @@ import (
2222

2323
"k8s.io/api/core/v1"
2424
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
25+
"k8s.io/client-go/informers"
2526
kubeclient "k8s.io/client-go/kubernetes/fake"
2627

2728
vkv1 "volcano.sh/volcano/pkg/apis/batch/v1alpha1"
2829
volcanoclient "volcano.sh/volcano/pkg/client/clientset/versioned/fake"
29-
30-
kubebatchclient "volcano.sh/volcano/pkg/client/clientset/versioned/fake"
3130
)
3231

3332
func newFakeController() *Controller {
34-
KubeBatchClientSet := kubebatchclient.NewSimpleClientset()
3533
VolcanoClientSet := volcanoclient.NewSimpleClientset()
3634
KubeClientSet := kubeclient.NewSimpleClientset()
3735

38-
controller := NewJobController(KubeClientSet, KubeBatchClientSet, VolcanoClientSet, 3)
36+
sharedInformers := informers.NewSharedInformerFactory(KubeClientSet, 0)
37+
38+
controller := NewJobController(KubeClientSet, VolcanoClientSet, sharedInformers, 3)
3939
return controller
4040
}
4141

pkg/controllers/podgroup/pg_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ type Controller struct {
5858
func NewPodgroupController(
5959
kubeClient kubernetes.Interface,
6060
kbClient kbver.Interface,
61+
sharedInformers informers.SharedInformerFactory,
6162
schedulerName string,
6263
) *Controller {
6364
cc := &Controller{
@@ -67,8 +68,7 @@ func NewPodgroupController(
6768
queue: workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()),
6869
}
6970

70-
factory := informers.NewSharedInformerFactory(cc.kubeClients, 0)
71-
cc.podInformer = factory.Core().V1().Pods()
71+
cc.podInformer = sharedInformers.Core().V1().Pods()
7272
cc.podLister = cc.podInformer.Lister()
7373
cc.podSynced = cc.podInformer.Informer().HasSynced
7474
cc.podInformer.Informer().AddEventHandler(

pkg/controllers/podgroup/pg_controller_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"k8s.io/api/core/v1"
2323
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2424
"k8s.io/apimachinery/pkg/types"
25+
"k8s.io/client-go/informers"
2526
kubeclient "k8s.io/client-go/kubernetes/fake"
2627

2728
scheduling "volcano.sh/volcano/pkg/apis/scheduling/v1alpha2"
@@ -31,8 +32,9 @@ import (
3132
func newFakeController() *Controller {
3233
KubeClientSet := kubeclient.NewSimpleClientset()
3334
KubeBatchClientSet := kubebatchclient.NewSimpleClientset()
35+
sharedInformers := informers.NewSharedInformerFactory(KubeClientSet, 0)
3436

35-
controller := NewPodgroupController(KubeClientSet, KubeBatchClientSet, "volcano")
37+
controller := NewPodgroupController(KubeClientSet, KubeBatchClientSet, sharedInformers, "volcano")
3638
return controller
3739
}
3840

0 commit comments

Comments
 (0)