mirror of https://github.com/minio/minio.git
http: fail appropriately and return standard Go error (#8837)
return http.ErrServerClosed with proper body when server is shutting down, allowing more context instead of just returning '503' which doesn't mean the same thing.
This commit is contained in:
parent
fca4ee84c9
commit
2bb69033e5
|
@ -87,15 +87,19 @@ func (srv *Server) Start() (err error) {
|
||||||
// Wrap given handler to do additional
|
// Wrap given handler to do additional
|
||||||
// * return 503 (service unavailable) if the server in shutdown.
|
// * return 503 (service unavailable) if the server in shutdown.
|
||||||
wrappedHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
wrappedHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
atomic.AddInt32(&srv.requestCount, 1)
|
// If server is in shutdown.
|
||||||
defer atomic.AddInt32(&srv.requestCount, -1)
|
|
||||||
|
|
||||||
// If server is in shutdown, return 503 (service unavailable)
|
|
||||||
if atomic.LoadUint32(&srv.inShutdown) != 0 {
|
if atomic.LoadUint32(&srv.inShutdown) != 0 {
|
||||||
w.WriteHeader(http.StatusServiceUnavailable)
|
// To indicate disable keep-alives
|
||||||
|
w.Header().Set("Connection", "close")
|
||||||
|
w.WriteHeader(http.StatusForbidden)
|
||||||
|
w.Write([]byte(http.ErrServerClosed.Error()))
|
||||||
|
w.(http.Flusher).Flush()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
atomic.AddInt32(&srv.requestCount, 1)
|
||||||
|
defer atomic.AddInt32(&srv.requestCount, -1)
|
||||||
|
|
||||||
// Handle request using passed handler.
|
// Handle request using passed handler.
|
||||||
handler.ServeHTTP(w, r)
|
handler.ServeHTTP(w, r)
|
||||||
})
|
})
|
||||||
|
@ -117,13 +121,13 @@ func (srv *Server) Shutdown() error {
|
||||||
srv.listenerMutex.Lock()
|
srv.listenerMutex.Lock()
|
||||||
if srv.listener == nil {
|
if srv.listener == nil {
|
||||||
srv.listenerMutex.Unlock()
|
srv.listenerMutex.Unlock()
|
||||||
return errors.New("server not initialized")
|
return http.ErrServerClosed
|
||||||
}
|
}
|
||||||
srv.listenerMutex.Unlock()
|
srv.listenerMutex.Unlock()
|
||||||
|
|
||||||
if atomic.AddUint32(&srv.inShutdown, 1) > 1 {
|
if atomic.AddUint32(&srv.inShutdown, 1) > 1 {
|
||||||
// shutdown in progress
|
// shutdown in progress
|
||||||
return errors.New("http server already in shutdown")
|
return http.ErrServerClosed
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close underneath HTTP listener.
|
// Close underneath HTTP listener.
|
||||||
|
|
Loading…
Reference in New Issue