func newWatcher()

in pkg/secrets/watch.go [56:94]


func newWatcher(ctx context.Context, logger log.Logger, client kubernetes.Interface, config *KubernetesSecretConfig) (*secretWatcher, error) {
	watcher := &secretWatcher{
		refCount: 1,
		done:     false,
	}

	err := watcher.start(ctx, client, config)
	if err != nil {
		_ = logger.Log("msg", "secret watcher failed to start", "err", err, "namespace", config.Namespace, "name", config.Name)
	}
	started := err == nil

	go func() {
		if !started {
			if ok := watcher.tryRestart(ctx, logger, client, config); !ok {
				return
			}
		}
		for {
			select {
			case e, ok := <-watcher.w.ResultChan():
				if ok {
					watcher.update(logger, e)
					continue
				}

				if ok := watcher.tryRestart(ctx, logger, client, config); !ok {
					return
				}
			case <-ctx.Done():
				// The application shutdown, we don't care about cleaning up.
				watcher.close()
				return
			}
		}
	}()

	return watcher, nil
}