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:
parent
bb2c0c3729
commit
e3f22ad2cc
4 changed files with 31 additions and 30 deletions
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue