diff options
author | Steve Azzopardi <sazzopardi@gitlab.com> | 2023-01-30 09:21:17 +0100 |
---|---|---|
committer | Steve Azzopardi <sazzopardi@gitlab.com> | 2023-01-30 09:54:42 +0100 |
commit | 80f684e48eca2bf1ef2006d84f8c49bec7104344 (patch) | |
tree | d96c92030bfe86a5183a7268361b2ec70788f73c /client/httpclient.go | |
parent | 51eab44edafd0c097e82c1a74fd379cae4869a42 (diff) | |
download | gitlab-shell-80f684e48eca2bf1ef2006d84f8c49bec7104344.tar.gz |
feat: make retryable http default client
What
---
Make the retryableHTTP client introduced in
https://gitlab.com/gitlab-org/gitlab-shell/-/merge_requests/703 the
default HTTP client.
Why
---
In
https://gitlab.com/gitlab-com/gl-infra/production/-/issues/7979#note_1254964426
we've seen a 99% error reduction on `git` commands from `gitlab-shell`
when the retryableHTTP client is used.
This has been running in production for over 2 weeks in `us-east1-b` and
5 days fleet-wide so we should be confident that this client works as
expected.
Reference: https://gitlab.com/gitlab-com/gl-infra/production/-/issues/7979
Signed-off-by: Steve Azzopardi <sazzopardi@gitlab.com>
Diffstat (limited to 'client/httpclient.go')
-rw-r--r-- | client/httpclient.go | 30 |
1 files changed, 8 insertions, 22 deletions
diff --git a/client/httpclient.go b/client/httpclient.go index 82b4b40..9b57add 100644 --- a/client/httpclient.go +++ b/client/httpclient.go @@ -32,7 +32,6 @@ const ( var ErrCafileNotFound = errors.New("cafile not found") type HttpClient struct { - HTTPClient *http.Client RetryableHTTP *retryablehttp.Client Host string } @@ -117,28 +116,15 @@ func NewHTTPClientWithOpts(gitlabURL, gitlabRelativeURLRoot, caFile, caPath stri return nil, errors.New("unknown GitLab URL prefix") } - c := &http.Client{ - Transport: correlation.NewInstrumentedRoundTripper(tracing.NewRoundTripper(transport)), - Timeout: readTimeout(readTimeoutSeconds), - } - - client := &HttpClient{HTTPClient: c, Host: host} - - if os.Getenv("FF_GITLAB_SHELL_RETRYABLE_HTTP") == "1" { - c := retryablehttp.NewClient() - c.RetryMax = hcc.retryMax - c.RetryWaitMax = hcc.retryWaitMax - c.RetryWaitMin = hcc.retryWaitMin - c.Logger = nil - c.HTTPClient.Transport = correlation.NewInstrumentedRoundTripper(tracing.NewRoundTripper(transport)) - c.HTTPClient.Timeout = readTimeout(readTimeoutSeconds) + c := retryablehttp.NewClient() + c.RetryMax = hcc.retryMax + c.RetryWaitMax = hcc.retryWaitMax + c.RetryWaitMin = hcc.retryWaitMin + c.Logger = nil + c.HTTPClient.Transport = correlation.NewInstrumentedRoundTripper(tracing.NewRoundTripper(transport)) + c.HTTPClient.Timeout = readTimeout(readTimeoutSeconds) - client = &HttpClient{RetryableHTTP: c, Host: host} - } - - if client.HTTPClient == nil && client.RetryableHTTP == nil { - panic("client/httpclient.go did not set http client") - } + client := &HttpClient{RetryableHTTP: c, Host: host} return client, nil } |