diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-29 11:08:01 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-29 11:08:01 +0300 |
| commit | 367ccc473347959cb7edff5dbd1fc36977cf9f67 (patch) | |
| tree | d8d93e4466659d48a91f969059f7e2aa574c46ea /internal/httpclient | |
| parent | f8ca4b8373ee4e7b9f9c0c0497117a52f09534bf (diff) | |
fix(httpclient): tune transport defaults for pq
Diffstat (limited to 'internal/httpclient')
| -rw-r--r-- | internal/httpclient/client.go | 20 | ||||
| -rw-r--r-- | internal/httpclient/client_test.go | 20 |
2 files changed, 39 insertions, 1 deletions
diff --git a/internal/httpclient/client.go b/internal/httpclient/client.go index 5c57cdc..79605e3 100644 --- a/internal/httpclient/client.go +++ b/internal/httpclient/client.go @@ -9,8 +9,26 @@ import ( const DefaultTimeout = 30 * time.Second +const ( + defaultTLSHandshakeTimeout = 10 * time.Second + defaultResponseHeaderTimeout = 15 * time.Second + defaultIdleConnTimeout = 90 * time.Second + defaultMaxIdleConnsPerHost = 10 +) + +var defaultTransport = func() *http.Transport { + transport := http.DefaultTransport.(*http.Transport).Clone() + transport.TLSHandshakeTimeout = defaultTLSHandshakeTimeout + transport.ResponseHeaderTimeout = defaultResponseHeaderTimeout + transport.IdleConnTimeout = defaultIdleConnTimeout + transport.MaxIdleConnsPerHost = defaultMaxIdleConnsPerHost + + return transport +}() + var defaultClient = &http.Client{ - Timeout: DefaultTimeout, + Timeout: DefaultTimeout, + Transport: defaultTransport, } func Do(req *http.Request) (*http.Response, error) { diff --git a/internal/httpclient/client_test.go b/internal/httpclient/client_test.go index a8b2216..787cc46 100644 --- a/internal/httpclient/client_test.go +++ b/internal/httpclient/client_test.go @@ -42,3 +42,23 @@ func TestDo_UsesSharedTimeout(t *testing.T) { t.Fatalf("expected shared timeout %v, got %v", DefaultTimeout, defaultClient.Timeout) } } + +func TestDo_UsesConfiguredTransportSettings(t *testing.T) { + transport, ok := defaultClient.Transport.(*http.Transport) + if !ok { + t.Fatalf("expected *http.Transport, got %T", defaultClient.Transport) + } + + if transport.TLSHandshakeTimeout != defaultTLSHandshakeTimeout { + t.Fatalf("expected TLS handshake timeout %v, got %v", defaultTLSHandshakeTimeout, transport.TLSHandshakeTimeout) + } + if transport.ResponseHeaderTimeout != defaultResponseHeaderTimeout { + t.Fatalf("expected response header timeout %v, got %v", defaultResponseHeaderTimeout, transport.ResponseHeaderTimeout) + } + if transport.IdleConnTimeout != defaultIdleConnTimeout { + t.Fatalf("expected idle connection timeout %v, got %v", defaultIdleConnTimeout, transport.IdleConnTimeout) + } + if transport.MaxIdleConnsPerHost != defaultMaxIdleConnsPerHost { + t.Fatalf("expected max idle conns per host %d, got %d", defaultMaxIdleConnsPerHost, transport.MaxIdleConnsPerHost) + } +} |
