From 069fb0cf38df15d6fdd97eb2a34ca0532aab1e7a Mon Sep 17 00:00:00 2001 From: Dimitris Sotirakis Date: Wed, 7 Jul 2021 13:13:53 +0300 Subject: [PATCH] HTTP Client: Introduce `dataproxy_max_idle_connections` config variable (#35864) * Introduce dataproxy_max_idle_connections config var * Fix according to reviewer's comments * Fix according to reviewer's comments - round 2 * Remove unused const * Bring back MaxIdleConnsPerHost * Fixes according to reviewer's comments --- conf/defaults.ini | 3 --- conf/sample.ini | 3 --- docs/sources/administration/configuration.md | 1 + pkg/models/datasource_cache.go | 25 ++++++++++---------- pkg/setting/setting.go | 8 +++++-- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/conf/defaults.ini b/conf/defaults.ini index 6b2990dbb42..5c795af5e23 100644 --- a/conf/defaults.ini +++ b/conf/defaults.ini @@ -166,9 +166,6 @@ max_conns_per_host = 0 # The maximum number of idle connections that Grafana will keep alive. max_idle_connections = 100 -# The maximum number of idle connections per host that Grafana will keep alive. -max_idle_connections_per_host = 2 - # How many seconds the data proxy keeps an idle connection open before timing out. idle_conn_timeout_seconds = 90 diff --git a/conf/sample.ini b/conf/sample.ini index 594892c1f58..02dea2e49e0 100644 --- a/conf/sample.ini +++ b/conf/sample.ini @@ -172,9 +172,6 @@ # The maximum number of idle connections that Grafana will keep alive. ;max_idle_connections = 100 -# The maximum number of idle connections per host that Grafana will keep alive. -;max_idle_connections_per_host = 2 - # How many seconds the data proxy keeps an idle connection open before timing out. ;idle_conn_timeout_seconds = 90 diff --git a/docs/sources/administration/configuration.md b/docs/sources/administration/configuration.md index 949b906f472..ed530620aaf 100644 --- a/docs/sources/administration/configuration.md +++ b/docs/sources/administration/configuration.md @@ -424,6 +424,7 @@ For more details check the [Transport.MaxConnsPerHost](https://golang.org/pkg/ne The maximum number of idle connections that Grafana will maintain. Default is `100`. For more details check the [Transport.MaxIdleConns](https://golang.org/pkg/net/http/#Transport.MaxIdleConns) documentation. ### max_idle_connections_per_host +[Deprecated - use max_idle_connections instead] The maximum number of idle connections per host that Grafana will maintain. Default is `2`. For more details check the [Transport.MaxIdleConnsPerHost](https://golang.org/pkg/net/http/#Transport.MaxIdleConnsPerHost) documentation. diff --git a/pkg/models/datasource_cache.go b/pkg/models/datasource_cache.go index 6e536f9e017..4ddc785d604 100644 --- a/pkg/models/datasource_cache.go +++ b/pkg/models/datasource_cache.go @@ -84,19 +84,20 @@ func (ds *DataSource) GetHTTPTransport(provider httpclient.Provider, customMiddl func (ds *DataSource) HTTPClientOptions() sdkhttpclient.Options { tlsOptions := ds.TLSOptions() + timeouts := &sdkhttpclient.TimeoutOptions{ + Timeout: ds.getTimeout(), + DialTimeout: time.Duration(setting.DataProxyDialTimeout) * time.Second, + KeepAlive: time.Duration(setting.DataProxyKeepAlive) * time.Second, + TLSHandshakeTimeout: time.Duration(setting.DataProxyTLSHandshakeTimeout) * time.Second, + ExpectContinueTimeout: time.Duration(setting.DataProxyExpectContinueTimeout) * time.Second, + MaxConnsPerHost: setting.DataProxyMaxConnsPerHost, + MaxIdleConns: setting.DataProxyMaxIdleConns, + MaxIdleConnsPerHost: setting.DataProxyMaxIdleConns, + IdleConnTimeout: time.Duration(setting.DataProxyIdleConnTimeout) * time.Second, + } opts := sdkhttpclient.Options{ - Timeouts: &sdkhttpclient.TimeoutOptions{ - Timeout: ds.getTimeout(), - DialTimeout: time.Duration(setting.DataProxyDialTimeout) * time.Second, - KeepAlive: time.Duration(setting.DataProxyKeepAlive) * time.Second, - TLSHandshakeTimeout: time.Duration(setting.DataProxyTLSHandshakeTimeout) * time.Second, - ExpectContinueTimeout: time.Duration(setting.DataProxyExpectContinueTimeout) * time.Second, - MaxConnsPerHost: setting.DataProxyMaxConnsPerHost, - MaxIdleConns: setting.DataProxyMaxIdleConns, - MaxIdleConnsPerHost: setting.DataProxyMaxIdleConnsPerHost, - IdleConnTimeout: time.Duration(setting.DataProxyIdleConnTimeout) * time.Second, - }, - Headers: getCustomHeaders(ds.JsonData, ds.DecryptedValues()), + Timeouts: timeouts, + Headers: getCustomHeaders(ds.JsonData, ds.DecryptedValues()), Labels: map[string]string{ "datasource_name": ds.Name, "datasource_uid": ds.Uid, diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index b019eda8ef8..1a5fd7042e1 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -850,11 +850,15 @@ func (cfg *Cfg) Load(args *CommandLineArgs) error { DataProxyTLSHandshakeTimeout = dataproxy.Key("tls_handshake_timeout_seconds").MustInt(10) DataProxyExpectContinueTimeout = dataproxy.Key("expect_continue_timeout_seconds").MustInt(1) DataProxyMaxConnsPerHost = dataproxy.Key("max_conns_per_host").MustInt(0) - DataProxyMaxIdleConns = dataproxy.Key("max_idle_connections").MustInt(100) - DataProxyMaxIdleConnsPerHost = dataproxy.Key("max_idle_connections_per_host").MustInt(2) + DataProxyMaxIdleConns = dataproxy.Key("max_idle_connections").MustInt() DataProxyIdleConnTimeout = dataproxy.Key("idle_conn_timeout_seconds").MustInt(90) cfg.SendUserHeader = dataproxy.Key("send_user_header").MustBool(false) + if val, err := dataproxy.Key("max_idle_connections_per_host").Int(); err == nil { + cfg.Logger.Warn("[Deprecated] the configuration setting 'max_idle_connections_per_host' is deprecated, please use 'max_idle_connections' instead") + DataProxyMaxIdleConns = val + } + if err := readSecuritySettings(iniFile, cfg); err != nil { return err }