admin: Don't stop old server if new one fails (#4964)

Fixes #4954

Co-authored-by: Matthew Holt <mholt@users.noreply.github.com>
This commit is contained in:
WeidiDeng 2022-08-26 12:17:52 +08:00 committed by GitHub
parent 5fb5b81439
commit 4c282e86da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -340,17 +340,19 @@ func (admin AdminConfig) allowedOrigins(addr NetworkAddress) []*url.URL {
// that there is always an admin server (unless it is explicitly
// configured to be disabled).
func replaceLocalAdminServer(cfg *Config) error {
// always be sure to close down the old admin endpoint
// always* be sure to close down the old admin endpoint
// as gracefully as possible, even if the new one is
// disabled -- careful to use reference to the current
// (old) admin endpoint since it will be different
// when the function returns
// (* except if the new one fails to start)
oldAdminServer := localAdminServer
var err error
defer func() {
// do the shutdown asynchronously so that any
// current API request gets a response; this
// goroutine may last a few seconds
if oldAdminServer != nil {
if oldAdminServer != nil && err == nil {
go func(oldAdminServer *http.Server) {
err := stopAdminServer(oldAdminServer)
if err != nil {