@@ -296,17 +296,47 @@ type multiNamespaceInformer struct {
296296var _ Informer = & multiNamespaceInformer {}
297297
298298// 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
302307 }
308+ return handles , nil
303309}
304310
305311// 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" )
309329 }
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
310340}
311341
312342// AddIndexers adds the indexer for each namespaced informer.
0 commit comments