in internal/launcher/launcher.go [281:314]
func (l *launcher) reconfigureWait(timeout time.Duration) (*config.C, error) {
start := time.Now()
timer := time.After(timeout)
for {
select {
case <-l.beaterErr:
return nil, errors.New("error channel closed")
case <-timer:
return nil, fmt.Errorf("timed out waiting for reconfiguration after %s", time.Since(start))
case update, ok := <-l.reloader.Channel():
if !ok {
return nil, errors.New("reconfiguration channel is closed")
}
if l.validator != nil {
err := l.validator.Validate(update)
if err != nil {
l.log.Errorf("Config update validation failed: %v", err)
healthErr := &BeaterUnhealthyError{}
if errors.As(err, healthErr) {
l.beat.Manager.UpdateStatus(status.Degraded, healthErr.Error())
}
continue
}
}
l.log.Infof("Received valid reconfiguration after waiting for %s", time.Since(start))
return update, nil
}
}
}