Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-pages.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfeistel <6742251-feistel@users.noreply.gitlab.com>2022-01-15 20:51:44 +0300
committerfeistel <6742251-feistel@users.noreply.gitlab.com>2022-01-20 01:49:29 +0300
commitb2b9c8d346f96257cd0fbc9577df1b9e81c28d21 (patch)
tree8f84102d4f965e3db4d3c79322f44d0443103757 /server.go
parenta7e130776d934a12ab000bee930c5c353b772635 (diff)
feat: implement graceful shutdown
Changelog: added
Diffstat (limited to 'server.go')
-rw-r--r--server.go37
1 files changed, 31 insertions, 6 deletions
diff --git a/server.go b/server.go
index 37939b9a..cc1db32b 100644
--- a/server.go
+++ b/server.go
@@ -23,11 +23,9 @@ type keepAliveSetter interface {
}
type listenerConfig struct {
- fd uintptr
isProxyV2 bool
tlsConfig *tls.Config
limiter *netutil.Limiter
- handler http.Handler
}
func (ln *keepAliveListener) Accept() (net.Conn, error) {
@@ -43,9 +41,16 @@ func (ln *keepAliveListener) Accept() (net.Conn, error) {
return conn, nil
}
-func (a *theApp) listenAndServe(config listenerConfig) error {
+func (a *theApp) listenAndServe(server *http.Server, fd uintptr, h http.Handler, opts ...option) error {
+ config := &listenerConfig{}
+
+ for _, opt := range opts {
+ opt(config)
+ }
+
// create server
- server := &http.Server{Handler: config.handler, TLSConfig: config.tlsConfig}
+ server.Handler = h
+ server.TLSConfig = config.tlsConfig
// ensure http2 is enabled even if TLSConfig is not null
// See https://github.com/golang/go/blob/97cee43c93cfccded197cd281f0a5885cdb605b4/src/net/http/server.go#L2947-L2954
@@ -53,9 +58,9 @@ func (a *theApp) listenAndServe(config listenerConfig) error {
server.TLSConfig.NextProtos = append(server.TLSConfig.NextProtos, "h2")
}
- l, err := net.FileListener(os.NewFile(config.fd, "[socket]"))
+ l, err := net.FileListener(os.NewFile(fd, "[socket]"))
if err != nil {
- return fmt.Errorf("failed to listen on FD %d: %v", config.fd, err)
+ return fmt.Errorf("failed to listen on FD %d: %v", fd, err)
}
if config.limiter != nil {
@@ -79,3 +84,23 @@ func (a *theApp) listenAndServe(config listenerConfig) error {
return server.Serve(l)
}
+
+type option func(*listenerConfig)
+
+func withProxyV2() option {
+ return func(conf *listenerConfig) {
+ conf.isProxyV2 = true
+ }
+}
+
+func withTLSConfig(c *tls.Config) option {
+ return func(conf *listenerConfig) {
+ conf.tlsConfig = c
+ }
+}
+
+func withLimiter(l *netutil.Limiter) option {
+ return func(conf *listenerConfig) {
+ conf.limiter = l
+ }
+}