@@ -62,8 +62,9 @@ type resizeController struct {
62
62
63
63
usedPVCs * inUsePVCStore
64
64
65
- podLister corelisters.PodLister
66
- podListerSynced cache.InformerSynced
65
+ podLister corelisters.PodLister
66
+ podListerSynced cache.InformerSynced
67
+ handleVolumeInUseError bool
67
68
}
68
69
69
70
// NewResizeController returns a ResizeController.
@@ -73,13 +74,10 @@ func NewResizeController(
73
74
kubeClient kubernetes.Interface ,
74
75
resyncPeriod time.Duration ,
75
76
informerFactory informers.SharedInformerFactory ,
76
- pvcRateLimiter workqueue.RateLimiter ) ResizeController {
77
+ pvcRateLimiter workqueue.RateLimiter ,
78
+ handleVolumeInUseError bool ) ResizeController {
77
79
pvInformer := informerFactory .Core ().V1 ().PersistentVolumes ()
78
80
pvcInformer := informerFactory .Core ().V1 ().PersistentVolumeClaims ()
79
-
80
- // list pods so as we can identify PVC that are in-use
81
- podInformer := informerFactory .Core ().V1 ().Pods ()
82
-
83
81
eventBroadcaster := record .NewBroadcaster ()
84
82
eventBroadcaster .StartLogging (klog .Infof )
85
83
eventBroadcaster .StartRecordingToSink (& corev1.EventSinkImpl {Interface : kubeClient .CoreV1 ().Events (v1 .NamespaceAll )})
@@ -90,18 +88,17 @@ func NewResizeController(
90
88
pvcRateLimiter , fmt .Sprintf ("%s-pvc" , name ))
91
89
92
90
ctrl := & resizeController {
93
- name : name ,
94
- resizer : resizer ,
95
- kubeClient : kubeClient ,
96
- pvLister : pvInformer .Lister (),
97
- pvSynced : pvInformer .Informer ().HasSynced ,
98
- pvcLister : pvcInformer .Lister (),
99
- pvcSynced : pvcInformer .Informer ().HasSynced ,
100
- podLister : podInformer .Lister (),
101
- podListerSynced : podInformer .Informer ().HasSynced ,
102
- claimQueue : claimQueue ,
103
- eventRecorder : eventRecorder ,
104
- usedPVCs : newUsedPVCStore (),
91
+ name : name ,
92
+ resizer : resizer ,
93
+ kubeClient : kubeClient ,
94
+ pvLister : pvInformer .Lister (),
95
+ pvSynced : pvInformer .Informer ().HasSynced ,
96
+ pvcLister : pvcInformer .Lister (),
97
+ pvcSynced : pvcInformer .Informer ().HasSynced ,
98
+ claimQueue : claimQueue ,
99
+ eventRecorder : eventRecorder ,
100
+ usedPVCs : newUsedPVCStore (),
101
+ handleVolumeInUseError : handleVolumeInUseError ,
105
102
}
106
103
107
104
// Add a resync period as the PVC's request size can be resized again when we handling
@@ -112,11 +109,18 @@ func NewResizeController(
112
109
DeleteFunc : ctrl .deletePVC ,
113
110
}, resyncPeriod )
114
111
115
- podInformer .Informer ().AddEventHandlerWithResyncPeriod (cache.ResourceEventHandlerFuncs {
116
- AddFunc : ctrl .addPod ,
117
- DeleteFunc : ctrl .deletePod ,
118
- UpdateFunc : ctrl .updatePod ,
119
- }, resyncPeriod )
112
+ if handleVolumeInUseError {
113
+ // list pods so as we can identify PVC that are in-use
114
+ klog .Infof ("Register Pod informer for resizer %s" , ctrl .name )
115
+ podInformer := informerFactory .Core ().V1 ().Pods ()
116
+ ctrl .podLister = podInformer .Lister ()
117
+ ctrl .podListerSynced = podInformer .Informer ().HasSynced
118
+ podInformer .Informer ().AddEventHandlerWithResyncPeriod (cache.ResourceEventHandlerFuncs {
119
+ AddFunc : ctrl .addPod ,
120
+ DeleteFunc : ctrl .deletePod ,
121
+ UpdateFunc : ctrl .updatePod ,
122
+ }, resyncPeriod )
123
+ }
120
124
121
125
return ctrl
122
126
}
@@ -235,8 +239,12 @@ func (ctrl *resizeController) Run(
235
239
defer klog .Infof ("Shutting down external resizer %s" , ctrl .name )
236
240
237
241
stopCh := ctx .Done ()
242
+ informersSyncd := []cache.InformerSynced {ctrl .pvSynced , ctrl .pvcSynced }
243
+ if ctrl .handleVolumeInUseError {
244
+ informersSyncd = append (informersSyncd , ctrl .podListerSynced )
245
+ }
238
246
239
- if ! cache .WaitForCacheSync (stopCh , ctrl . pvSynced , ctrl . pvcSynced , ctrl . podListerSynced ) {
247
+ if ! cache .WaitForCacheSync (stopCh , informersSyncd ... ) {
240
248
klog .Errorf ("Cannot sync pod, pv or pvc caches" )
241
249
return
242
250
}
0 commit comments