From 89d58bec1652794793682f4d97b01fe663448b6a Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Thu, 8 Apr 2021 17:51:59 -0700 Subject: [PATCH] avoid frequent DNS lookups for baremetal setups (#11972) bump up the DNS cache for baremetal setups upto 10 minutes --- cmd/common-main.go | 10 +++++++++- cmd/http/dial_dnscache.go | 7 ++++++- cmd/update.go | 13 ++++++++++--- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/cmd/common-main.go b/cmd/common-main.go index 0550f6a5e..4b55a3685 100644 --- a/cmd/common-main.go +++ b/cmd/common-main.go @@ -59,7 +59,15 @@ func init() { config.Logger.Info = logger.Info config.Logger.LogIf = logger.LogIf - globalDNSCache = xhttp.NewDNSCache(10*time.Second, 10*time.Second, logger.LogOnceIf) + if IsKubernetes() || IsDocker() || IsBOSH() || IsDCOS() || IsKubernetesReplicaSet() || IsPCFTile() { + // 30 seconds matches the orchestrator DNS TTLs, have + // a 5 second timeout to lookup from DNS servers. + globalDNSCache = xhttp.NewDNSCache(30*time.Second, 5*time.Second, logger.LogOnceIf) + } else { + // On bare-metals DNS do not change often, so it is + // safe to assume a higher timeout upto 10 minutes. + globalDNSCache = xhttp.NewDNSCache(10*time.Minute, 5*time.Second, logger.LogOnceIf) + } initGlobalContext() diff --git a/cmd/http/dial_dnscache.go b/cmd/http/dial_dnscache.go index bbfaabdb1..5513597be 100644 --- a/cmd/http/dial_dnscache.go +++ b/cmd/http/dial_dnscache.go @@ -121,6 +121,8 @@ func NewDNSCache(freq time.Duration, lookupTimeout time.Duration, loggerOnce fun doneCh: make(chan struct{}), } + rnd := rand.New(rand.NewSource(time.Now().UnixNano())) + timer := time.NewTimer(freq) go func() { defer timer.Stop() @@ -128,7 +130,10 @@ func NewDNSCache(freq time.Duration, lookupTimeout time.Duration, loggerOnce fun for { select { case <-timer.C: - timer.Reset(freq) + // Make sure that refreshes on DNS do not be attempted + // at the same time, allows for reduced load on the + // DNS servers. + timer.Reset(time.Duration(rnd.Float64() * float64(freq))) r.Refresh() case <-r.doneCh: diff --git a/cmd/update.go b/cmd/update.go index f9fe982de..e98f1c523 100644 --- a/cmd/update.go +++ b/cmd/update.go @@ -221,6 +221,11 @@ func IsSourceBuild() bool { return err != nil } +// IsPCFTile returns if server is running in PCF +func IsPCFTile() bool { + return env.Get("MINIO_PCF_TILE_VERSION", "") != "" +} + // DO NOT CHANGE USER AGENT STYLE. // The style should be // @@ -286,9 +291,11 @@ func getUserAgent(mode string) string { } } - pcfTileVersion := env.Get("MINIO_PCF_TILE_VERSION", "") - if pcfTileVersion != "" { - uaAppend(" MinIO/pcf-tile-", pcfTileVersion) + if IsPCFTile() { + pcfTileVersion := env.Get("MINIO_PCF_TILE_VERSION", "") + if pcfTileVersion != "" { + uaAppend(" MinIO/pcf-tile-", pcfTileVersion) + } } return strings.Join(userAgentParts, "")