@@ -163,17 +163,8 @@ func NewDaemonSetsController(
163
163
}
164
164
165
165
daemonSetInformer .Informer ().AddEventHandler (cache.ResourceEventHandlerFuncs {
166
- AddFunc : func (obj interface {}) {
167
- ds := obj .(* apps.DaemonSet )
168
- klog .V (4 ).Infof ("Adding daemon set %s" , ds .Name )
169
- dsc .enqueueDaemonSet (ds )
170
- },
171
- UpdateFunc : func (old , cur interface {}) {
172
- oldDS := old .(* apps.DaemonSet )
173
- curDS := cur .(* apps.DaemonSet )
174
- klog .V (4 ).Infof ("Updating daemon set %s" , oldDS .Name )
175
- dsc .enqueueDaemonSet (curDS )
176
- },
166
+ AddFunc : dsc .addDaemonset ,
167
+ UpdateFunc : dsc .updateDaemonset ,
177
168
DeleteFunc : dsc .deleteDaemonset ,
178
169
})
179
170
dsc .dsLister = daemonSetInformer .Lister ()
@@ -231,22 +222,59 @@ func indexByPodNodeName(obj interface{}) ([]string, error) {
231
222
return []string {pod .Spec .NodeName }, nil
232
223
}
233
224
225
+ func (dsc * DaemonSetsController ) addDaemonset (obj interface {}) {
226
+ ds := obj .(* apps.DaemonSet )
227
+ klog .V (4 ).Infof ("Adding daemon set %s" , ds .Name )
228
+ dsc .enqueueDaemonSet (ds )
229
+ }
230
+
231
+ func (dsc * DaemonSetsController ) updateDaemonset (cur , old interface {}) {
232
+ oldDS := old .(* apps.DaemonSet )
233
+ curDS := cur .(* apps.DaemonSet )
234
+
235
+ // TODO: make a KEP and fix informers to always call the delete event handler on re-create
236
+ if curDS .UID != oldDS .UID {
237
+ key , err := controller .KeyFunc (oldDS )
238
+ if err != nil {
239
+ utilruntime .HandleError (fmt .Errorf ("couldn't get key for object %#v: %v" , oldDS , err ))
240
+ return
241
+ }
242
+ dsc .deleteDaemonset (cache.DeletedFinalStateUnknown {
243
+ Key : key ,
244
+ Obj : oldDS ,
245
+ })
246
+ }
247
+
248
+ klog .V (4 ).Infof ("Updating daemon set %s" , oldDS .Name )
249
+ dsc .enqueueDaemonSet (curDS )
250
+ }
251
+
234
252
func (dsc * DaemonSetsController ) deleteDaemonset (obj interface {}) {
235
253
ds , ok := obj .(* apps.DaemonSet )
236
254
if ! ok {
237
255
tombstone , ok := obj .(cache.DeletedFinalStateUnknown )
238
256
if ! ok {
239
- utilruntime .HandleError (fmt .Errorf ("Couldn 't get object from tombstone %#v" , obj ))
257
+ utilruntime .HandleError (fmt .Errorf ("couldn 't get object from tombstone %#v" , obj ))
240
258
return
241
259
}
242
260
ds , ok = tombstone .Obj .(* apps.DaemonSet )
243
261
if ! ok {
244
- utilruntime .HandleError (fmt .Errorf ("Tombstone contained object that is not a DaemonSet %#v" , obj ))
262
+ utilruntime .HandleError (fmt .Errorf ("tombstone contained object that is not a DaemonSet %#v" , obj ))
245
263
return
246
264
}
247
265
}
248
266
klog .V (4 ).Infof ("Deleting daemon set %s" , ds .Name )
249
- dsc .enqueueDaemonSet (ds )
267
+
268
+ key , err := controller .KeyFunc (ds )
269
+ if err != nil {
270
+ utilruntime .HandleError (fmt .Errorf ("couldn't get key for object %#v: %v" , ds , err ))
271
+ return
272
+ }
273
+
274
+ // Delete expectations for the DaemonSet so if we create a new one with the same name it starts clean
275
+ dsc .expectations .DeleteExpectations (key )
276
+
277
+ dsc .queue .Add (key )
250
278
}
251
279
252
280
// Run begins watching and syncing daemon sets.
0 commit comments