@@ -25,7 +25,6 @@ import (
25
25
"k8s.io/apimachinery/pkg/util/runtime"
26
26
"k8s.io/apimachinery/pkg/util/wait"
27
27
"k8s.io/client-go/informers"
28
- coreinformers "k8s.io/client-go/informers/core/v1"
29
28
"k8s.io/client-go/kubernetes"
30
29
corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
31
30
corelisters "k8s.io/client-go/listers/core/v1"
@@ -60,12 +59,10 @@ type Controller struct {
60
59
vkClients * vkver.Clientset
61
60
kbClients * kbver.Clientset
62
61
63
- jobInformer vkbatchinfo.JobInformer
64
- podInformer coreinformers.PodInformer
65
- pvcInformer coreinformers.PersistentVolumeClaimInformer
66
- pgInformer kbinfo.PodGroupInformer
67
- svcInformer coreinformers.ServiceInformer
68
- cmdInformer vkcoreinfo.CommandInformer
62
+ jobInformer vkbatchinfo.JobInformer
63
+ pgInformer kbinfo.PodGroupInformer
64
+ cmdInformer vkcoreinfo.CommandInformer
65
+ sharedInformers informers.SharedInformerFactory
69
66
70
67
// A store of jobs
71
68
jobLister vkbatchlister.JobLister
@@ -152,9 +149,10 @@ func NewJobController(config *rest.Config) *Controller {
152
149
cc .cmdLister = cc .cmdInformer .Lister ()
153
150
cc .cmdSynced = cc .cmdInformer .Informer ().HasSynced
154
151
155
- cc .podInformer = informers .NewSharedInformerFactory (cc .kubeClients , 0 ).Core ().V1 ().Pods ()
152
+ cc .sharedInformers = informers .NewSharedInformerFactory (cc .kubeClients , 0 )
153
+ podInformer := cc .sharedInformers .Core ().V1 ().Pods ()
156
154
157
- cc . podInformer .Informer ().AddEventHandler (cache.FilteringResourceEventHandler {
155
+ podInformer .Informer ().AddEventHandler (cache.FilteringResourceEventHandler {
158
156
FilterFunc : func (obj interface {}) bool {
159
157
switch t := obj .(type ) {
160
158
case * v1.Pod :
@@ -177,16 +175,16 @@ func NewJobController(config *rest.Config) *Controller {
177
175
},
178
176
})
179
177
180
- cc .podLister = cc . podInformer .Lister ()
181
- cc .podSynced = cc . podInformer .Informer ().HasSynced
178
+ cc .podLister = podInformer .Lister ()
179
+ cc .podSynced = podInformer .Informer ().HasSynced
182
180
183
- cc . pvcInformer = informers . NewSharedInformerFactory ( cc .kubeClients , 0 ) .Core ().V1 ().PersistentVolumeClaims ()
184
- cc .pvcLister = cc . pvcInformer .Lister ()
185
- cc .pvcSynced = cc . pvcInformer .Informer ().HasSynced
181
+ pvcInformer := cc .sharedInformers .Core ().V1 ().PersistentVolumeClaims ()
182
+ cc .pvcLister = pvcInformer .Lister ()
183
+ cc .pvcSynced = pvcInformer .Informer ().HasSynced
186
184
187
- cc . svcInformer = informers . NewSharedInformerFactory ( cc .kubeClients , 0 ) .Core ().V1 ().Services ()
188
- cc .svcLister = cc . svcInformer .Lister ()
189
- cc .svcSynced = cc . svcInformer .Informer ().HasSynced
185
+ svcInformer := cc .sharedInformers .Core ().V1 ().Services ()
186
+ cc .svcLister = svcInformer .Lister ()
187
+ cc .svcSynced = svcInformer .Informer ().HasSynced
190
188
191
189
cc .pgInformer = kbinfoext .NewSharedInformerFactory (cc .kbClients , 0 ).Scheduling ().V1alpha1 ().PodGroups ()
192
190
cc .pgInformer .Informer ().AddEventHandler (cache.ResourceEventHandlerFuncs {
@@ -205,11 +203,9 @@ func NewJobController(config *rest.Config) *Controller {
205
203
// Run start JobController
206
204
func (cc * Controller ) Run (stopCh <- chan struct {}) {
207
205
go cc .jobInformer .Informer ().Run (stopCh )
208
- go cc .podInformer .Informer ().Run (stopCh )
209
- go cc .pvcInformer .Informer ().Run (stopCh )
210
206
go cc .pgInformer .Informer ().Run (stopCh )
211
- go cc .svcInformer .Informer ().Run (stopCh )
212
207
go cc .cmdInformer .Informer ().Run (stopCh )
208
+ go cc .sharedInformers .Start (stopCh )
213
209
214
210
cache .WaitForCacheSync (stopCh , cc .jobSynced , cc .podSynced , cc .pgSynced ,
215
211
cc .svcSynced , cc .cmdSynced , cc .pvcSynced )
@@ -223,10 +219,15 @@ func (cc *Controller) Run(stopCh <-chan struct{}) {
223
219
}
224
220
225
221
func (cc * Controller ) worker () {
222
+ for cc .processNextReq () {
223
+ }
224
+ }
225
+
226
+ func (cc * Controller ) processNextReq () bool {
226
227
obj , shutdown := cc .queue .Get ()
227
228
if shutdown {
228
229
glog .Errorf ("Fail to pop item from queue" )
229
- return
230
+ return false
230
231
}
231
232
232
233
req := obj .(apis.Request )
@@ -238,14 +239,14 @@ func (cc *Controller) worker() {
238
239
if err != nil {
239
240
// TODO(k82cn): ignore not-ready error.
240
241
glog .Errorf ("Failed to get job by <%v> from cache: %v" , req , err )
241
- return
242
+ return true
242
243
}
243
244
244
245
st := state .NewState (jobInfo )
245
246
if st == nil {
246
247
glog .Errorf ("Invalid state <%s> of Job <%v/%v>" ,
247
248
jobInfo .Job .Status .State , jobInfo .Job .Namespace , jobInfo .Job .Name )
248
- return
249
+ return true
249
250
}
250
251
251
252
action := applyPolicies (jobInfo .Job , & req )
@@ -257,9 +258,11 @@ func (cc *Controller) worker() {
257
258
jobInfo .Job .Namespace , jobInfo .Job .Name , err )
258
259
// If any error, requeue it.
259
260
cc .queue .AddRateLimited (req )
260
- return
261
+ return true
261
262
}
262
263
263
264
// If no error, forget it.
264
265
cc .queue .Forget (req )
266
+
267
+ return true
265
268
}
0 commit comments