From aa5251dd31a823b5ffbfa35c46ccf7056a3eff29 Mon Sep 17 00:00:00 2001 From: skarimo <40482491+skarimo@users.noreply.github.com> Date: Mon, 22 Jul 2024 09:48:44 -0400 Subject: [PATCH] reduce idle connection timeout (#2496) --- datadog/fwprovider/framework_provider.go | 1 + datadog/internal/utils/utils.go | 25 ++++++++++++++++++++++++ datadog/provider.go | 1 + 3 files changed, 27 insertions(+) diff --git a/datadog/fwprovider/framework_provider.go b/datadog/fwprovider/framework_provider.go index f7e4c8685e..9e47430a95 100644 --- a/datadog/fwprovider/framework_provider.go +++ b/datadog/fwprovider/framework_provider.go @@ -428,6 +428,7 @@ func defaultConfigureFunc(p *FrameworkProvider, request *provider.ConfigureReque } } + ddClientConfig.HTTPClient = utils.NewHTTPClient() datadogClient := datadog.NewAPIClient(ddClientConfig) p.DatadogApiInstances = &utils.ApiInstances{HttpClient: datadogClient} diff --git a/datadog/internal/utils/utils.go b/datadog/internal/utils/utils.go index 7d96e2afa3..125265cb6c 100644 --- a/datadog/internal/utils/utils.go +++ b/datadog/internal/utils/utils.go @@ -11,6 +11,7 @@ import ( "os" "strings" "sync" + "time" "github.com/DataDog/datadog-api-client-go/v2/api/datadog" frameworkDiag "github.com/hashicorp/terraform-plugin-framework/diag" @@ -81,6 +82,30 @@ type Resource interface { GetOk(string) (interface{}, bool) } +// NewTransport returns new transport with default values borrowed from http.DefaultTransport +func NewTransport() *http.Transport { + return &http.Transport{ + // Default values copied from http.DefaultTransport + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).DialContext, + ForceAttemptHTTP2: true, + MaxIdleConns: 100, + IdleConnTimeout: 45 * time.Second, // Reduced idle connection timeout from default of 90s + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 1 * time.Second, + } +} + +// NewHTTPClient returns new http.Client +func NewHTTPClient() *http.Client { + return &http.Client{ + Transport: NewTransport(), + } +} + // FrameworkErrorDiag return error diag func FrameworkErrorDiag(err error, msg string) frameworkDiag.ErrorDiagnostic { var summary string diff --git a/datadog/provider.go b/datadog/provider.go index 23bbcba18b..1d84244fbf 100644 --- a/datadog/provider.go +++ b/datadog/provider.go @@ -395,6 +395,7 @@ func providerConfigure(ctx context.Context, d *schema.ResourceData) (interface{} }) } + config.HTTPClient = utils.NewHTTPClient() datadogClient := datadog.NewAPIClient(config) apiInstances := &utils.ApiInstances{HttpClient: datadogClient} if validate {