From 1b453728a304007a8a503b8f6e1887b11bac11d0 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Fri, 22 Jan 2021 15:37:41 -0800 Subject: [PATCH] initialize forwarder after init() to avoid crashes (#11330) DNSCache dialer is a global value initialized in init(), whereas `go` keeps `var =` before `init()` , also we don't need to keep proxy routers as global entities - register the forwarder as necessary to avoid crashes. --- cmd/common-main.go | 10 ++++++++++ cmd/generic-handlers.go | 13 ++----------- cmd/globals.go | 3 +++ 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/cmd/common-main.go b/cmd/common-main.go index b495821c8..69dfaa60f 100644 --- a/cmd/common-main.go +++ b/cmd/common-main.go @@ -41,6 +41,7 @@ import ( "github.com/minio/minio/pkg/certs" "github.com/minio/minio/pkg/console" "github.com/minio/minio/pkg/env" + "github.com/minio/minio/pkg/handlers" ) // serverDebugLog will enable debug printing @@ -51,10 +52,19 @@ func init() { logger.RegisterError(config.FmtError) rand.Seed(time.Now().UTC().UnixNano()) + globalDNSCache = xhttp.NewDNSCache(10*time.Second, 10*time.Second, logger.LogOnceIf) initGlobalContext() + globalForwarder = handlers.NewForwarder(&handlers.Forwarder{ + PassHost: true, + RoundTripper: newGatewayHTTPTransport(1 * time.Hour), + Logger: func(err error) { + logger.LogIf(GlobalContext, err) + }, + }) + globalReplicationState = newReplicationState() globalTransitionState = newTransitionState() diff --git a/cmd/generic-handlers.go b/cmd/generic-handlers.go index 46e9ab4c5..02f8d4e98 100644 --- a/cmd/generic-handlers.go +++ b/cmd/generic-handlers.go @@ -30,7 +30,6 @@ import ( xhttp "github.com/minio/minio/cmd/http" "github.com/minio/minio/cmd/http/stats" "github.com/minio/minio/cmd/logger" - "github.com/minio/minio/pkg/handlers" ) // Adds limiting body size middleware @@ -532,14 +531,6 @@ func setRequestValidityHandler(h http.Handler) http.Handler { }) } -var fwd = handlers.NewForwarder(&handlers.Forwarder{ - PassHost: true, - RoundTripper: newGatewayHTTPTransport(1 * time.Hour), - Logger: func(err error) { - logger.LogIf(GlobalContext, err) - }, -}) - // setBucketForwardingHandler middleware forwards the path style requests // on a bucket to the right bucket location, bucket to IP configuration // is obtained from centralized etcd configuration service. @@ -589,7 +580,7 @@ func setBucketForwardingHandler(h http.Handler) http.Handler { r.URL.Scheme = "https" } r.URL.Host = getHostFromSrv(sr) - fwd.ServeHTTP(w, r) + globalForwarder.ServeHTTP(w, r) return } h.ServeHTTP(w, r) @@ -639,7 +630,7 @@ func setBucketForwardingHandler(h http.Handler) http.Handler { r.URL.Scheme = "https" } r.URL.Host = getHostFromSrv(sr) - fwd.ServeHTTP(w, r) + globalForwarder.ServeHTTP(w, r) return } h.ServeHTTP(w, r) diff --git a/cmd/globals.go b/cmd/globals.go index 16a1ba043..94976ebde 100644 --- a/cmd/globals.go +++ b/cmd/globals.go @@ -25,6 +25,7 @@ import ( "github.com/minio/minio-go/v7/pkg/set" "github.com/minio/minio/pkg/bucket/bandwidth" + "github.com/minio/minio/pkg/handlers" humanize "github.com/dustin/go-humanize" "github.com/minio/minio/cmd/config/cache" @@ -285,6 +286,8 @@ var ( globalProxyTransport http.RoundTripper globalDNSCache *xhttp.DNSCache + + globalForwarder *handlers.Forwarder // Add new variable global values here. )