This reverts commit 281a48d092fa84500c63b984ad45c59a06f301c4.
Signed-off-by: Alex Crawford <alex.crawford@coreos.com>
| ... | ... |
@@ -78,10 +78,11 @@ func (s *Server) Close() {
|
| 78 | 78 |
} |
| 79 | 79 |
|
| 80 | 80 |
// ServeAPI loops through all initialized servers and spawns goroutine |
| 81 |
-// with Serve() method for each. |
|
| 81 |
+// with Server method for each. It sets CreateMux() as Handler also. |
|
| 82 | 82 |
func (s *Server) ServeAPI() error {
|
| 83 | 83 |
var chErrors = make(chan error, len(s.servers)) |
| 84 | 84 |
for _, srv := range s.servers {
|
| 85 |
+ srv.srv.Handler = s.CreateMux() |
|
| 85 | 86 |
go func(srv *HTTPServer) {
|
| 86 | 87 |
var err error |
| 87 | 88 |
logrus.Infof("API listen on %s", srv.l.Addr())
|
| ... | ... |
@@ -168,16 +169,11 @@ func (s *Server) makeHTTPHandler(handler httputils.APIFunc) http.HandlerFunc {
|
| 168 | 168 |
} |
| 169 | 169 |
|
| 170 | 170 |
// InitRouters initializes a list of routers for the server. |
| 171 |
-// Sets those routers as Handler for each server. |
|
| 172 | 171 |
func (s *Server) InitRouters(d *daemon.Daemon) {
|
| 173 | 172 |
s.addRouter(local.NewRouter(d)) |
| 174 | 173 |
s.addRouter(network.NewRouter(d)) |
| 175 | 174 |
s.addRouter(volume.NewRouter(d)) |
| 176 | 175 |
s.addRouter(container.NewRouter(d)) |
| 177 |
- |
|
| 178 |
- for _, srv := range s.servers {
|
|
| 179 |
- srv.srv.Handler = s.CreateMux() |
|
| 180 |
- } |
|
| 181 | 176 |
} |
| 182 | 177 |
|
| 183 | 178 |
// addRouter adds a new router to the server. |
| ... | ... |
@@ -217,21 +217,6 @@ func (cli *DaemonCli) CmdDaemon(args ...string) error {
|
| 217 | 217 |
logrus.Fatal(err) |
| 218 | 218 |
} |
| 219 | 219 |
|
| 220 |
- // The serve API routine never exits unless an error occurs |
|
| 221 |
- // We need to start it as a goroutine and wait on it so |
|
| 222 |
- // daemon doesn't exit |
|
| 223 |
- // All servers must be protected with some mechanism (systemd socket, listenbuffer) |
|
| 224 |
- // which prevents real handling of request until routes will be set. |
|
| 225 |
- serveAPIWait := make(chan error) |
|
| 226 |
- go func() {
|
|
| 227 |
- if err := api.ServeAPI(); err != nil {
|
|
| 228 |
- logrus.Errorf("ServeAPI error: %v", err)
|
|
| 229 |
- serveAPIWait <- err |
|
| 230 |
- return |
|
| 231 |
- } |
|
| 232 |
- serveAPIWait <- nil |
|
| 233 |
- }() |
|
| 234 |
- |
|
| 235 | 220 |
if err := migrateKey(); err != nil {
|
| 236 | 221 |
logrus.Fatal(err) |
| 237 | 222 |
} |
| ... | ... |
@@ -259,6 +244,19 @@ func (cli *DaemonCli) CmdDaemon(args ...string) error {
|
| 259 | 259 |
|
| 260 | 260 |
api.InitRouters(d) |
| 261 | 261 |
|
| 262 |
+ // The serve API routine never exits unless an error occurs |
|
| 263 |
+ // We need to start it as a goroutine and wait on it so |
|
| 264 |
+ // daemon doesn't exit |
|
| 265 |
+ serveAPIWait := make(chan error) |
|
| 266 |
+ go func() {
|
|
| 267 |
+ if err := api.ServeAPI(); err != nil {
|
|
| 268 |
+ logrus.Errorf("ServeAPI error: %v", err)
|
|
| 269 |
+ serveAPIWait <- err |
|
| 270 |
+ return |
|
| 271 |
+ } |
|
| 272 |
+ serveAPIWait <- nil |
|
| 273 |
+ }() |
|
| 274 |
+ |
|
| 262 | 275 |
signal.Trap(func() {
|
| 263 | 276 |
api.Close() |
| 264 | 277 |
<-serveAPIWait |