api: use `cleanhttp.DefaultPooledTransport` for default API client (#12492)
We expect every Nomad API client to use a single connection to any given agent, so take advantage of keep-alive by switching the default transport to `DefaultPooledClient`. Provide a facility to close idle connections for testing purposes. Restores the previously reverted #12409 Co-authored-by: Ben Buzbee <bbuzbee@cloudflare.com>
This commit is contained in:
parent
0b13ea6920
commit
1724765096
|
@ -0,0 +1,3 @@
|
||||||
|
```release-note:improvement
|
||||||
|
api: default to using `DefaultPooledTransport` client to support keep-alive by default
|
||||||
|
```
|
14
api/api.go
14
api/api.go
|
@ -264,7 +264,7 @@ func (t *TLSConfig) Copy() *TLSConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
func defaultHttpClient() *http.Client {
|
func defaultHttpClient() *http.Client {
|
||||||
httpClient := cleanhttp.DefaultClient()
|
httpClient := cleanhttp.DefaultPooledClient()
|
||||||
transport := httpClient.Transport.(*http.Transport)
|
transport := httpClient.Transport.(*http.Transport)
|
||||||
transport.TLSHandshakeTimeout = 10 * time.Second
|
transport.TLSHandshakeTimeout = 10 * time.Second
|
||||||
transport.TLSClientConfig = &tls.Config{
|
transport.TLSClientConfig = &tls.Config{
|
||||||
|
@ -476,6 +476,18 @@ func NewClient(config *Config) (*Client, error) {
|
||||||
return client, nil
|
return client, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close closes the client's idle keep-alived connections. The default
|
||||||
|
// client configuration uses keep-alive to maintain connections and
|
||||||
|
// you should instantiate a single Client and reuse it for all
|
||||||
|
// requests from the same host. Connections will be closed
|
||||||
|
// automatically once the client is garbage collected. If you are
|
||||||
|
// creating multiple clients on the same host (for example, for
|
||||||
|
// testing), it may be useful to call Close() to avoid hitting
|
||||||
|
// connection limits.
|
||||||
|
func (c *Client) Close() {
|
||||||
|
c.httpClient.CloseIdleConnections()
|
||||||
|
}
|
||||||
|
|
||||||
// Address return the address of the Nomad agent
|
// Address return the address of the Nomad agent
|
||||||
func (c *Client) Address() string {
|
func (c *Client) Address() string {
|
||||||
return c.config.Address
|
return c.config.Address
|
||||||
|
|
|
@ -1113,6 +1113,8 @@ func TestHTTPServer_Limits_OK(t *testing.T) {
|
||||||
conf.Address = a.HTTPAddr()
|
conf.Address = a.HTTPAddr()
|
||||||
conf.TLSConfig.Insecure = true
|
conf.TLSConfig.Insecure = true
|
||||||
client, err := api.NewClient(conf)
|
client, err := api.NewClient(conf)
|
||||||
|
defer client.Close()
|
||||||
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// Assert a blocking query isn't timed out by the
|
// Assert a blocking query isn't timed out by the
|
||||||
|
|
Loading…
Reference in New Issue