Skip to content

Commit

Permalink
api: use cleanhttp.DefaultPooledTransport for default API client
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
tgross and Ben Buzbee committed Apr 6, 2022
1 parent 9dc0b88 commit cf039e7
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 1 deletion.
3 changes: 3 additions & 0 deletions .changelog/12492.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:improvement
api: default to using `DefaultPooledTransport` client to support keep-alive by default
```
14 changes: 13 additions & 1 deletion api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ func (t *TLSConfig) Copy() *TLSConfig {
}

func defaultHttpClient() *http.Client {
httpClient := cleanhttp.DefaultClient()
httpClient := cleanhttp.DefaultPooledClient()
transport := httpClient.Transport.(*http.Transport)
transport.TLSHandshakeTimeout = 10 * time.Second
transport.TLSClientConfig = &tls.Config{
Expand Down Expand Up @@ -476,6 +476,18 @@ func NewClient(config *Config) (*Client, error) {
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
func (c *Client) Address() string {
return c.config.Address
Expand Down
2 changes: 2 additions & 0 deletions command/agent/http_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1113,6 +1113,8 @@ func TestHTTPServer_Limits_OK(t *testing.T) {
conf.Address = a.HTTPAddr()
conf.TLSConfig.Insecure = true
client, err := api.NewClient(conf)
defer client.Close()

require.NoError(t, err)

// Assert a blocking query isn't timed out by the
Expand Down

0 comments on commit cf039e7

Please sign in to comment.