Merge pull request #16825 from LK4D4/return_listenbuffer
Return listenbuffer behavior Upstream-commit: c281f692c7f9abc31b733a1344a03b9aa4493934 Component: engine
This commit is contained in:
@ -76,11 +76,10 @@ func (s *Server) Close() {
|
||||
}
|
||||
|
||||
// ServeAPI loops through all initialized servers and spawns goroutine
|
||||
// with Server method for each. It sets CreateMux() as Handler also.
|
||||
// with Serve() method for each.
|
||||
func (s *Server) ServeAPI() error {
|
||||
var chErrors = make(chan error, len(s.servers))
|
||||
for _, srv := range s.servers {
|
||||
srv.srv.Handler = s.CreateMux()
|
||||
go func(srv *HTTPServer) {
|
||||
var err error
|
||||
logrus.Infof("API listen on %s", srv.l.Addr())
|
||||
@ -162,9 +161,13 @@ func (s *Server) makeHTTPHandler(handler httputils.APIFunc) http.HandlerFunc {
|
||||
}
|
||||
|
||||
// InitRouters initializes a list of routers for the server.
|
||||
// Sets those routers as Handler for each server.
|
||||
func (s *Server) InitRouters(d *daemon.Daemon) {
|
||||
s.addRouter(local.NewRouter(d))
|
||||
s.addRouter(network.NewRouter(d))
|
||||
for _, srv := range s.servers {
|
||||
srv.srv.Handler = s.CreateMux()
|
||||
}
|
||||
}
|
||||
|
||||
// addRouter adds a new router to the server.
|
||||
|
||||
@ -235,6 +235,21 @@ func (cli *DaemonCli) CmdDaemon(args ...string) error {
|
||||
logrus.Fatal(err)
|
||||
}
|
||||
|
||||
// The serve API routine never exits unless an error occurs
|
||||
// We need to start it as a goroutine and wait on it so
|
||||
// daemon doesn't exit
|
||||
// All servers must be protected with some mechanism (systemd socket, listenbuffer)
|
||||
// which prevents real handling of request until routes will be set.
|
||||
serveAPIWait := make(chan error)
|
||||
go func() {
|
||||
if err := api.ServeAPI(); err != nil {
|
||||
logrus.Errorf("ServeAPI error: %v", err)
|
||||
serveAPIWait <- err
|
||||
return
|
||||
}
|
||||
serveAPIWait <- nil
|
||||
}()
|
||||
|
||||
if err := migrateKey(); err != nil {
|
||||
logrus.Fatal(err)
|
||||
}
|
||||
@ -262,19 +277,6 @@ func (cli *DaemonCli) CmdDaemon(args ...string) error {
|
||||
|
||||
api.InitRouters(d)
|
||||
|
||||
// The serve API routine never exits unless an error occurs
|
||||
// We need to start it as a goroutine and wait on it so
|
||||
// daemon doesn't exit
|
||||
serveAPIWait := make(chan error)
|
||||
go func() {
|
||||
if err := api.ServeAPI(); err != nil {
|
||||
logrus.Errorf("ServeAPI error: %v", err)
|
||||
serveAPIWait <- err
|
||||
return
|
||||
}
|
||||
serveAPIWait <- nil
|
||||
}()
|
||||
|
||||
signal.Trap(func() {
|
||||
api.Close()
|
||||
<-serveAPIWait
|
||||
|
||||
Reference in New Issue
Block a user