Merge pull request #18213 from crawford/18212-fix-api-server
Revert "Return listenbuffer behavior"
This commit is contained in:
commit
3422858653
|
@ -78,10 +78,11 @@ func (s *Server) Close() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ServeAPI loops through all initialized servers and spawns goroutine
|
// ServeAPI loops through all initialized servers and spawns goroutine
|
||||||
// with Serve() method for each.
|
// with Server method for each. It sets CreateMux() as Handler also.
|
||||||
func (s *Server) ServeAPI() error {
|
func (s *Server) ServeAPI() error {
|
||||||
var chErrors = make(chan error, len(s.servers))
|
var chErrors = make(chan error, len(s.servers))
|
||||||
for _, srv := range s.servers {
|
for _, srv := range s.servers {
|
||||||
|
srv.srv.Handler = s.CreateMux()
|
||||||
go func(srv *HTTPServer) {
|
go func(srv *HTTPServer) {
|
||||||
var err error
|
var err error
|
||||||
logrus.Infof("API listen on %s", srv.l.Addr())
|
logrus.Infof("API listen on %s", srv.l.Addr())
|
||||||
|
@ -168,16 +169,11 @@ func (s *Server) makeHTTPHandler(handler httputils.APIFunc) http.HandlerFunc {
|
||||||
}
|
}
|
||||||
|
|
||||||
// InitRouters initializes a list of routers for the server.
|
// InitRouters initializes a list of routers for the server.
|
||||||
// Sets those routers as Handler for each server.
|
|
||||||
func (s *Server) InitRouters(d *daemon.Daemon) {
|
func (s *Server) InitRouters(d *daemon.Daemon) {
|
||||||
s.addRouter(local.NewRouter(d))
|
s.addRouter(local.NewRouter(d))
|
||||||
s.addRouter(network.NewRouter(d))
|
s.addRouter(network.NewRouter(d))
|
||||||
s.addRouter(volume.NewRouter(d))
|
s.addRouter(volume.NewRouter(d))
|
||||||
s.addRouter(container.NewRouter(d))
|
s.addRouter(container.NewRouter(d))
|
||||||
|
|
||||||
for _, srv := range s.servers {
|
|
||||||
srv.srv.Handler = s.CreateMux()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// addRouter adds a new router to the server.
|
// addRouter adds a new router to the server.
|
||||||
|
|
|
@ -217,21 +217,6 @@ func (cli *DaemonCli) CmdDaemon(args ...string) error {
|
||||||
logrus.Fatal(err)
|
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 {
|
if err := migrateKey(); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -259,6 +244,19 @@ func (cli *DaemonCli) CmdDaemon(args ...string) error {
|
||||||
|
|
||||||
api.InitRouters(d)
|
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() {
|
signal.Trap(func() {
|
||||||
api.Close()
|
api.Close()
|
||||||
<-serveAPIWait
|
<-serveAPIWait
|
||||||
|
|
Loading…
Reference in New Issue