@@ -296,17 +296,47 @@ type multiNamespaceInformer struct {
296
296
var _ Informer = & multiNamespaceInformer {}
297
297
298
298
// AddEventHandler adds the handler to each namespaced informer.
299
- func (i * multiNamespaceInformer ) AddEventHandler (handler toolscache.ResourceEventHandler ) {
300
- for _ , informer := range i .namespaceToInformer {
301
- informer .AddEventHandler (handler )
299
+ func (i * multiNamespaceInformer ) AddEventHandler (handler toolscache.ResourceEventHandler ) (toolscache.ResourceEventHandlerRegistration , error ) {
300
+ handles := make (map [string ]toolscache.ResourceEventHandlerRegistration , len (i .namespaceToInformer ))
301
+ for ns , informer := range i .namespaceToInformer {
302
+ registration , err := informer .AddEventHandler (handler )
303
+ if err != nil {
304
+ return nil , err
305
+ }
306
+ handles [ns ] = registration
302
307
}
308
+ return handles , nil
303
309
}
304
310
305
311
// AddEventHandlerWithResyncPeriod adds the handler with a resync period to each namespaced informer.
306
- func (i * multiNamespaceInformer ) AddEventHandlerWithResyncPeriod (handler toolscache.ResourceEventHandler , resyncPeriod time.Duration ) {
307
- for _ , informer := range i .namespaceToInformer {
308
- informer .AddEventHandlerWithResyncPeriod (handler , resyncPeriod )
312
+ func (i * multiNamespaceInformer ) AddEventHandlerWithResyncPeriod (handler toolscache.ResourceEventHandler , resyncPeriod time.Duration ) (toolscache.ResourceEventHandlerRegistration , error ) {
313
+ handles := make (map [string ]toolscache.ResourceEventHandlerRegistration , len (i .namespaceToInformer ))
314
+ for ns , informer := range i .namespaceToInformer {
315
+ registration , err := informer .AddEventHandlerWithResyncPeriod (handler , resyncPeriod )
316
+ if err != nil {
317
+ return nil , err
318
+ }
319
+ handles [ns ] = registration
320
+ }
321
+ return handles , nil
322
+ }
323
+
324
+ // RemoveEventHandler removes a formerly added event handler given by its registration handle.
325
+ func (i * multiNamespaceInformer ) RemoveEventHandler (h toolscache.ResourceEventHandlerRegistration ) error {
326
+ handles , ok := h .(map [string ]toolscache.ResourceEventHandlerRegistration )
327
+ if ! ok {
328
+ return fmt .Errorf ("it is not the registration returned by multiNamespaceInformer" )
309
329
}
330
+ for ns , informer := range i .namespaceToInformer {
331
+ registration , ok := handles [ns ]
332
+ if ! ok {
333
+ continue
334
+ }
335
+ if err := informer .RemoveEventHandler (registration ); err != nil {
336
+ return err
337
+ }
338
+ }
339
+ return nil
310
340
}
311
341
312
342
// AddIndexers adds the indexer for each namespaced informer.
0 commit comments