Skip to content

Commit

Permalink
remove duplicated error messages & cobra help messages on error
Browse files Browse the repository at this point in the history
Signed-off-by: Inteon <42113979+inteon@users.noreply.github.com>
  • Loading branch information
inteon committed Jul 28, 2021
1 parent d867fcc commit 78d1378
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 23 deletions.
2 changes: 1 addition & 1 deletion cmd/cainjector/app/start.go
Expand Up @@ -146,7 +146,7 @@ func (o InjectorControllerOptions) RunInjectorController(ctx context.Context) er
})

select {
case <-gctx.Done(): // Exit early if the Elected channel gets closed because we are shutting down.
case <-gctx.Done(): // Exit early if we are shutting down or if the manager has exited with an error
// Wait for error group to complete and return
return g.Wait()
case <-mgr.Elected(): // Don't launch the controllers unless we have been elected leader
Expand Down
35 changes: 15 additions & 20 deletions cmd/controller/app/controller.go
Expand Up @@ -29,6 +29,7 @@ import (
corev1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/resource"
utilerrors "k8s.io/apimachinery/pkg/util/errors"
kubeinformers "k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/scheme"
Expand Down Expand Up @@ -76,17 +77,15 @@ func Run(opts *options.ControllerOptions, stopCh <-chan struct{}) error {

ctx, kubeCfg, err := buildControllerContext(rootCtx, opts)
if err != nil {
log.Error(err, "error building controller context", "options", opts)
return err
return fmt.Errorf("error building controller context (options %v): %v", opts, err)
}

enabledControllers := opts.EnabledControllers()
log.Info(fmt.Sprintf("enabled controllers: %s", enabledControllers.List()))

ln, err := net.Listen("tcp", opts.MetricsListenAddress)
if err != nil {
log.Error(err, "failed to listen on prometheus address", "address", opts.MetricsListenAddress)
return err
return fmt.Errorf("failed to listen on prometheus address %s: %v", opts.MetricsListenAddress, err)
}
server := ctx.Metrics.NewServer(ln, opts.EnablePprof)

Expand All @@ -102,7 +101,7 @@ func Run(opts *options.ControllerOptions, stopCh <-chan struct{}) error {
return nil
})
g.Go(func() error {
log.WithValues("address", ln.Addr()).V(logf.InfoLevel).Info("listening for connections on")
log.V(logf.InfoLevel).Info("starting metrics server", "address", ln.Addr())
if err := server.Serve(ln); err != http.ErrServerClosed {
return err
}
Expand All @@ -115,8 +114,7 @@ func Run(opts *options.ControllerOptions, stopCh <-chan struct{}) error {
log.V(logf.InfoLevel).Info("starting leader election")
leaderElectionClient, err := kubernetes.NewForConfig(rest.AddUserAgent(kubeCfg, "leader-election"))
if err != nil {
log.Error(err, "error creating leader election client")
return err
return fmt.Errorf("error creating leader election client: %v", err)
}

errorCh := make(chan error, 1)
Expand All @@ -130,7 +128,6 @@ func Run(opts *options.ControllerOptions, stopCh <-chan struct{}) error {
// context was canceled, just return
return
default:
log.V(logf.ErrorLevel).Info("leader election lost")
errorCh <- errors.New("leader election lost")
}
},
Expand All @@ -150,7 +147,7 @@ func Run(opts *options.ControllerOptions, stopCh <-chan struct{}) error {
}

select {
case <-rootCtx.Done(): // Exit early if the Elected channel gets closed because we are shutting down.
case <-rootCtx.Done(): // Exit early if we are shutting down or if the errgroup has already exited with an error
// Wait for error group to complete and return
return g.Wait()
case <-elected: // Don't launch the controllers unless we have been elected leader
Expand All @@ -174,16 +171,20 @@ func Run(opts *options.ControllerOptions, stopCh <-chan struct{}) error {

iface, err := fn(ctx)
if err != nil {
log.Error(err, "error starting controller")
err = fmt.Errorf("error starting controller: %v", err)

cancelContext()
_ = g.Wait() // Don't process errors, we already have an error
err2 := g.Wait() // Don't process errors, we already have an error
if err2 != nil {
return utilerrors.NewAggregate([]error{err, err2})
}
return err
}

g.Go(func() error {
log.V(logf.InfoLevel).Info("starting controller")

// TODO: make this either a constant or a command line flag
workers := 5
return iface.Run(workers, rootCtx.Done())
})
Expand All @@ -196,8 +197,7 @@ func Run(opts *options.ControllerOptions, stopCh <-chan struct{}) error {

err = g.Wait()
if err != nil {
log.Error(err, "error starting controller")
return err
return fmt.Errorf("error starting controller: %v", err)
}
log.V(logf.InfoLevel).Info("control loops exited")

Expand Down Expand Up @@ -341,13 +341,10 @@ func buildControllerContext(ctx context.Context, opts *options.ControllerOptions
}

func startLeaderElection(ctx context.Context, opts *options.ControllerOptions, leaderElectionClient kubernetes.Interface, recorder record.EventRecorder, callbacks leaderelection.LeaderCallbacks) error {
log := logf.FromContext(ctx, "leader-election")

// Identity used to distinguish between multiple controller manager instances
id, err := os.Hostname()
if err != nil {
log.Error(err, "error getting hostname")
return err
return fmt.Errorf("error getting hostname: %v", err)
}

// Set up Multilock for leader election. This Multilock is here for the
Expand All @@ -366,9 +363,7 @@ func startLeaderElection(ctx context.Context, opts *options.ControllerOptions, l
lc,
)
if err != nil {
// We should never get here.
log.Error(err, "error creating leader election lock")
return err
return fmt.Errorf("error creating leader election lock: %v", err)
}

// Try and become the leader and start controller manager loops
Expand Down
8 changes: 7 additions & 1 deletion cmd/controller/app/start.go
Expand Up @@ -73,8 +73,14 @@ to renew certificates at an appropriate time before expiry.`,
}

logf.Log.V(logf.InfoLevel).Info("starting controller", "version", util.AppVersion, "git-commit", util.AppGitCommit)
return o.RunCertManagerController(stopCh)
if err := o.RunCertManagerController(stopCh); err != nil {
cmd.SilenceUsage = true // Don't display usage information when exiting because of an error
return err
}

return nil
},
SilenceErrors: true, // Errors are already logged when calling cmd.Execute()
}

flags := cmd.Flags()
Expand Down
2 changes: 1 addition & 1 deletion cmd/controller/main.go
Expand Up @@ -36,7 +36,7 @@ func main() {

flag.CommandLine.Parse([]string{})
if err := cmd.Execute(); err != nil {
logf.Log.Error(err, "error executing command")
logf.Log.Error(err, "error while executing")
util.SetExitCode(err)
}
}

0 comments on commit 78d1378

Please sign in to comment.