Graceful: Allow graceful restart for unix sockets (#9113)

Previously we could not handle graceful restarts for http over unix
sockets. These can now be handled.
This commit is contained in:
zeripath 2019-11-24 02:11:24 +00:00 committed by Antoine GIRARD
parent bb2c0c3729
commit e3f22ad2cc
4 changed files with 31 additions and 30 deletions

View file

@ -16,6 +16,7 @@ import (
"sync"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
)
const (
@ -165,15 +166,27 @@ func GetListenerUnix(network string, address *net.UnixAddr) (*net.UnixListener,
if isSameAddr(l.Addr(), address) {
providedListeners = append(providedListeners[:i], providedListeners[i+1:]...)
activeListeners = append(activeListeners, l)
return l.(*net.UnixListener), nil
unixListener := l.(*net.UnixListener)
unixListener.SetUnlinkOnClose(true)
return unixListener, nil
}
}
// make a fresh listener
if err := os.Remove(address.Name); err != nil && !os.IsNotExist(err) {
return nil, fmt.Errorf("Failed to remove unix socket %s: %v", address.Name, err)
}
l, err := net.ListenUnix(network, address)
if err != nil {
return nil, err
}
fileMode := os.FileMode(setting.UnixSocketPermission)
if err = os.Chmod(address.Name, fileMode); err != nil {
return nil, fmt.Errorf("Failed to set permission of unix socket to %s: %v", fileMode.String(), err)
}
activeListeners = append(activeListeners, l)
return l, nil
}

View file

@ -9,6 +9,7 @@ package graceful
import (
"fmt"
"net"
"os"
"os/exec"
"strings"
@ -48,6 +49,10 @@ func RestartProcess() (int, error) {
if err != nil {
return 0, err
}
if unixListener, ok := l.(*net.UnixListener); ok {
unixListener.SetUnlinkOnClose(false)
}
// Remember to close these at the end.
defer files[i].Close()
}