@@ -18,6 +18,7 @@ package devicetainteviction
18
18
19
19
import (
20
20
"context"
21
+ "errors"
21
22
"fmt"
22
23
"math"
23
24
"slices"
@@ -319,7 +320,8 @@ func New(c clientset.Interface, podInformer coreinformers.PodInformer, claimInfo
319
320
}
320
321
321
322
// Run starts the controller which will run until the context is done.
322
- func (tc * Controller ) Run (ctx context.Context ) {
323
+ // An error is returned for startup problems.
324
+ func (tc * Controller ) Run (ctx context.Context ) error {
323
325
defer utilruntime .HandleCrash ()
324
326
logger := klog .FromContext (ctx )
325
327
logger .Info ("Starting" , "controller" , tc .name )
@@ -370,7 +372,7 @@ func (tc *Controller) Run(ctx context.Context) {
370
372
// mutex serializes event processing.
371
373
var mutex sync.Mutex
372
374
373
- claimHandler , _ := tc .claimInformer .Informer ().AddEventHandler (cache.ResourceEventHandlerFuncs {
375
+ claimHandler , err := tc .claimInformer .Informer ().AddEventHandler (cache.ResourceEventHandlerFuncs {
374
376
AddFunc : func (obj any ) {
375
377
claim , ok := obj .(* resourceapi.ResourceClaim )
376
378
if ! ok {
@@ -409,12 +411,15 @@ func (tc *Controller) Run(ctx context.Context) {
409
411
tc .handleClaimChange (claim , nil )
410
412
},
411
413
})
414
+ if err != nil {
415
+ return fmt .Errorf ("adding claim event handler:%w" , err )
416
+ }
412
417
defer func () {
413
418
_ = tc .claimInformer .Informer ().RemoveEventHandler (claimHandler )
414
419
}()
415
420
tc .haveSynced = append (tc .haveSynced , claimHandler .HasSynced )
416
421
417
- podHandler , _ := tc .podInformer .Informer ().AddEventHandler (cache.ResourceEventHandlerFuncs {
422
+ podHandler , err := tc .podInformer .Informer ().AddEventHandler (cache.ResourceEventHandlerFuncs {
418
423
AddFunc : func (obj any ) {
419
424
pod , ok := obj .(* v1.Pod )
420
425
if ! ok {
@@ -453,6 +458,9 @@ func (tc *Controller) Run(ctx context.Context) {
453
458
tc .handlePodChange (pod , nil )
454
459
},
455
460
})
461
+ if err != nil {
462
+ return fmt .Errorf ("adding pod event handler: %w" , err )
463
+ }
456
464
defer func () {
457
465
_ = tc .podInformer .Informer ().RemoveEventHandler (podHandler )
458
466
}()
@@ -467,8 +475,7 @@ func (tc *Controller) Run(ctx context.Context) {
467
475
}
468
476
sliceTracker , err := resourceslicetracker .StartTracker (ctx , opts )
469
477
if err != nil {
470
- logger .Info ("Failed to initialize ResourceSlice tracker; device taint processing leading to Pod eviction is now paused" , "err" , err )
471
- return
478
+ return fmt .Errorf ("initialize ResourceSlice tracker: %w" , err )
472
479
}
473
480
tc .haveSynced = append (tc .haveSynced , sliceTracker .HasSynced )
474
481
defer sliceTracker .Stop ()
@@ -478,11 +485,11 @@ func (tc *Controller) Run(ctx context.Context) {
478
485
// work which might be done as events get emitted for intermediate
479
486
// state.
480
487
if ! cache .WaitForNamedCacheSyncWithContext (ctx , tc .haveSynced ... ) {
481
- return
488
+ return errors . New ( "wait for cache sync timed out" )
482
489
}
483
490
logger .V (1 ).Info ("Underlying informers have synced" )
484
491
485
- _ , _ = sliceTracker .AddEventHandler (cache.ResourceEventHandlerFuncs {
492
+ _ , err = sliceTracker .AddEventHandler (cache.ResourceEventHandlerFuncs {
486
493
AddFunc : func (obj any ) {
487
494
slice , ok := obj .(* resourceapi.ResourceSlice )
488
495
if ! ok {
@@ -519,12 +526,16 @@ func (tc *Controller) Run(ctx context.Context) {
519
526
tc .handleSliceChange (slice , nil )
520
527
},
521
528
})
529
+ if err != nil {
530
+ return fmt .Errorf ("add slice event handler: %w" , err )
531
+ }
522
532
523
533
// sliceTracker.AddEventHandler blocked while delivering events for all known
524
534
// ResourceSlices. Therefore our own state is up-to-date once we get here.
525
535
tc .hasSynced .Store (1 )
526
536
527
537
<- ctx .Done ()
538
+ return nil
528
539
}
529
540
530
541
func (tc * Controller ) handleClaimChange (oldClaim , newClaim * resourceapi.ResourceClaim ) {
0 commit comments