From eeb8bbcc295e0ac0c76b35146d463aa6bf9eacba Mon Sep 17 00:00:00 2001 From: bzp2010 Date: Mon, 28 Jun 2021 15:09:42 +0800 Subject: [PATCH] fix: error handler --- api/cmd/root.go | 20 ++++++++++++-------- api/internal/core/server/server.go | 22 +++++++--------------- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/api/cmd/root.go b/api/cmd/root.go index f0557e7175..b9d2aa48a0 100644 --- a/api/cmd/root.go +++ b/api/cmd/root.go @@ -83,18 +83,22 @@ func manageAPI() error { return err } - err = s.Start() - if err != nil { - return err - } + // start Manager API server + errSig := make(chan error, 5) + s.Start(errSig) // Signal received to the process externally. quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) - sig := <-quit - log.Infof("The Manager API server receive %s and start shutting down", sig.String()) - s.Stop() - log.Infof("The Manager API server exited") + select { + case sig := <-quit: + log.Infof("The Manager API server receive %s and start shutting down", sig.String()) + s.Stop() + log.Infof("The Manager API server exited") + case err := <-errSig: + log.Errorf("The Manager API server start failed: %s", err.Error()) + return err + } return nil } diff --git a/api/internal/core/server/server.go b/api/internal/core/server/server.go index 5e72744813..07c4b1cd41 100644 --- a/api/internal/core/server/server.go +++ b/api/internal/core/server/server.go @@ -44,29 +44,29 @@ func NewServer(options *Options) (*server, error) { return &server{options: options}, nil } -func (s *server) Start() error { +func (s *server) Start(errSig chan error) { // initialize server err := s.init() if err != nil { - return err + errSig <- err + return } // write daemon pid file err = s.writePID() if err != nil { - return err + errSig <- err + return } // print server info to stdout s.printInfo() - // For internal error handling across multiple goroutines. - errSig := make(chan error, 1) - // start HTTP server log.Infof("The Manager API is listening on %s", s.server.Addr) go func() { - if err := s.server.ListenAndServe(); err != nil && err != http.ErrServerClosed { + err := s.server.ListenAndServe() + if err != nil && err != http.ErrServerClosed { log.Errorf("listen and serv fail: %s", err) errSig <- err } @@ -82,14 +82,6 @@ func (s *server) Start() error { } }() } - - // handle HTTP(s) server error - select { - case err := <-errSig: - return err - default: - return nil - } } func (s *server) Stop() {