fix(controller): panic in events.Controller.Add() (#5766)

This commit is contained in:
vflaux 2025-08-27 08:48:09 +02:00 committed by GitHub
parent 81290c03e6
commit a8ab91de38
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 9 additions and 8 deletions

View File

@ -174,8 +174,8 @@ type Controller struct {
// The runAtMutex is for atomic updating of nextRunAt and lastRunAt // The runAtMutex is for atomic updating of nextRunAt and lastRunAt
runAtMutex sync.Mutex runAtMutex sync.Mutex
// The lastRunAt used for throttling and batching reconciliation // The lastRunAt used for throttling and batching reconciliation
lastRunAt time.Time lastRunAt time.Time
EventController events.EventEmitter EventEmitter events.EventEmitter
// MangedRecordTypes are DNS record types that will be considered for management. // MangedRecordTypes are DNS record types that will be considered for management.
ManagedRecordTypes []string ManagedRecordTypes []string
// ExcludeRecordTypes are DNS record types that will be excluded from management. // ExcludeRecordTypes are DNS record types that will be excluded from management.
@ -247,7 +247,7 @@ func (c *Controller) RunOnce(ctx context.Context) error {
deprecatedRegistryErrors.Counter.Inc() deprecatedRegistryErrors.Counter.Inc()
return err return err
} else { } else {
emitChangeEvent(c.EventController, *plan.Changes, events.RecordReady) emitChangeEvent(c.EventEmitter, *plan.Changes, events.RecordReady)
} }
} else { } else {
controllerNoChangesTotal.Counter.Inc() controllerNoChangesTotal.Counter.Inc()

View File

@ -228,7 +228,7 @@ func TestRunOnce(t *testing.T) {
Registry: r, Registry: r,
Policy: &plan.SyncPolicy{}, Policy: &plan.SyncPolicy{},
ManagedRecordTypes: cfg.ManagedDNSRecordTypes, ManagedRecordTypes: cfg.ManagedDNSRecordTypes,
EventController: emitter, EventEmitter: emitter,
} }
assert.NoError(t, ctrl.RunOnce(context.Background())) assert.NoError(t, ctrl.RunOnce(context.Background()))

View File

@ -363,13 +363,14 @@ func buildController(
events.WithKubeConfig(cfg.KubeConfig, cfg.APIServerURL, cfg.RequestTimeout), events.WithKubeConfig(cfg.KubeConfig, cfg.APIServerURL, cfg.RequestTimeout),
events.WithEmitEvents(cfg.EmitEvents), events.WithEmitEvents(cfg.EmitEvents),
events.WithDryRun(cfg.DryRun)) events.WithDryRun(cfg.DryRun))
var eventsCtrl *events.Controller var eventEmitter events.EventEmitter
if eventsCfg.IsEnabled() { if eventsCfg.IsEnabled() {
eventsCtrl, err = events.NewEventController(eventsCfg) eventCtrl, err := events.NewEventController(eventsCfg)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
eventsCtrl.Run(ctx) eventCtrl.Run(ctx)
eventEmitter = eventCtrl
} }
return &Controller{ return &Controller{
@ -381,7 +382,7 @@ func buildController(
ManagedRecordTypes: cfg.ManagedDNSRecordTypes, ManagedRecordTypes: cfg.ManagedDNSRecordTypes,
ExcludeRecordTypes: cfg.ExcludeDNSRecordTypes, ExcludeRecordTypes: cfg.ExcludeDNSRecordTypes,
MinEventSyncInterval: cfg.MinEventSyncInterval, MinEventSyncInterval: cfg.MinEventSyncInterval,
EventController: eventsCtrl, EventEmitter: eventEmitter,
}, nil }, nil
} }