Merge pull request #10400 from hashicorp/dnephin/api-client-response-body

api: properly close the response body
This commit is contained in:
Daniel Nephin 2021-06-15 11:50:29 -04:00 committed by GitHub
commit 82862e2a89
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 164 additions and 156 deletions

View File

@ -449,7 +449,7 @@ func (a *ACL) Bootstrap() (*ACLToken, *WriteMeta, error) {
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out ACLToken
@ -470,7 +470,7 @@ func (a *ACL) Create(acl *ACLEntry, q *WriteOptions) (string, *WriteMeta, error)
if err != nil {
return "", nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out struct{ ID string }
@ -491,7 +491,7 @@ func (a *ACL) Update(acl *ACLEntry, q *WriteOptions) (*WriteMeta, error) {
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
return wm, nil
@ -507,7 +507,7 @@ func (a *ACL) Destroy(id string, q *WriteOptions) (*WriteMeta, error) {
if err != nil {
return nil, err
}
resp.Body.Close()
closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
return wm, nil
@ -523,7 +523,7 @@ func (a *ACL) Clone(id string, q *WriteOptions) (string, *WriteMeta, error) {
if err != nil {
return "", nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out struct{ ID string }
@ -543,7 +543,7 @@ func (a *ACL) Info(id string, q *QueryOptions) (*ACLEntry, *QueryMeta, error) {
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -569,7 +569,7 @@ func (a *ACL) List(q *QueryOptions) ([]*ACLEntry, *QueryMeta, error) {
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -590,7 +590,7 @@ func (a *ACL) Replication(q *QueryOptions) (*ACLReplicationStatus, *QueryMeta, e
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -613,7 +613,7 @@ func (a *ACL) TokenCreate(token *ACLToken, q *WriteOptions) (*ACLToken, *WriteMe
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out ACLToken
@ -638,7 +638,7 @@ func (a *ACL) TokenUpdate(token *ACLToken, q *WriteOptions) (*ACLToken, *WriteMe
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out ACLToken
@ -665,7 +665,7 @@ func (a *ACL) TokenClone(tokenID string, description string, q *WriteOptions) (*
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out ACLToken
@ -685,7 +685,7 @@ func (a *ACL) TokenDelete(tokenID string, q *WriteOptions) (*WriteMeta, error) {
if err != nil {
return nil, err
}
resp.Body.Close()
closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
return wm, nil
@ -700,7 +700,7 @@ func (a *ACL) TokenRead(tokenID string, q *QueryOptions) (*ACLToken, *QueryMeta,
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -724,7 +724,7 @@ func (a *ACL) TokenReadSelf(q *QueryOptions) (*ACLToken, *QueryMeta, error) {
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -747,7 +747,7 @@ func (a *ACL) TokenList(q *QueryOptions) ([]*ACLTokenListEntry, *QueryMeta, erro
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -773,7 +773,7 @@ func (a *ACL) PolicyCreate(policy *ACLPolicy, q *WriteOptions) (*ACLPolicy, *Wri
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out ACLPolicy
@ -798,7 +798,7 @@ func (a *ACL) PolicyUpdate(policy *ACLPolicy, q *WriteOptions) (*ACLPolicy, *Wri
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out ACLPolicy
@ -817,7 +817,7 @@ func (a *ACL) PolicyDelete(policyID string, q *WriteOptions) (*WriteMeta, error)
if err != nil {
return nil, err
}
resp.Body.Close()
closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
return wm, nil
@ -831,7 +831,7 @@ func (a *ACL) PolicyRead(policyID string, q *QueryOptions) (*ACLPolicy, *QueryMe
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -853,7 +853,7 @@ func (a *ACL) PolicyReadByName(policyName string, q *QueryOptions) (*ACLPolicy,
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -880,7 +880,7 @@ func (a *ACL) PolicyList(q *QueryOptions) ([]*ACLPolicyListEntry, *QueryMeta, er
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -905,7 +905,7 @@ func (a *ACL) RulesTranslate(rules io.Reader) (string, error) {
if err != nil {
return "", err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
qm.RequestTime = rtt
@ -929,7 +929,7 @@ func (a *ACL) RulesTranslateToken(tokenID string) (string, error) {
if err != nil {
return "", err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
qm.RequestTime = rtt
@ -956,7 +956,7 @@ func (a *ACL) RoleCreate(role *ACLRole, q *WriteOptions) (*ACLRole, *WriteMeta,
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out ACLRole
@ -981,7 +981,7 @@ func (a *ACL) RoleUpdate(role *ACLRole, q *WriteOptions) (*ACLRole, *WriteMeta,
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out ACLRole
@ -1000,7 +1000,7 @@ func (a *ACL) RoleDelete(roleID string, q *WriteOptions) (*WriteMeta, error) {
if err != nil {
return nil, err
}
resp.Body.Close()
closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
return wm, nil
@ -1014,7 +1014,7 @@ func (a *ACL) RoleRead(roleID string, q *QueryOptions) (*ACLRole, *QueryMeta, er
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -1040,7 +1040,7 @@ func (a *ACL) RoleReadByName(roleName string, q *QueryOptions) (*ACLRole, *Query
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -1068,7 +1068,7 @@ func (a *ACL) RoleList(q *QueryOptions) ([]*ACLRole, *QueryMeta, error) {
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -1094,7 +1094,7 @@ func (a *ACL) AuthMethodCreate(method *ACLAuthMethod, q *WriteOptions) (*ACLAuth
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out ACLAuthMethod
@ -1118,7 +1118,7 @@ func (a *ACL) AuthMethodUpdate(method *ACLAuthMethod, q *WriteOptions) (*ACLAuth
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out ACLAuthMethod
@ -1141,7 +1141,7 @@ func (a *ACL) AuthMethodDelete(methodName string, q *WriteOptions) (*WriteMeta,
if err != nil {
return nil, err
}
resp.Body.Close()
closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
return wm, nil
@ -1159,7 +1159,7 @@ func (a *ACL) AuthMethodRead(methodName string, q *QueryOptions) (*ACLAuthMethod
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -1187,7 +1187,7 @@ func (a *ACL) AuthMethodList(q *QueryOptions) ([]*ACLAuthMethodListEntry, *Query
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -1215,7 +1215,7 @@ func (a *ACL) BindingRuleCreate(rule *ACLBindingRule, q *WriteOptions) (*ACLBind
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out ACLBindingRule
@ -1240,7 +1240,7 @@ func (a *ACL) BindingRuleUpdate(rule *ACLBindingRule, q *WriteOptions) (*ACLBind
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out ACLBindingRule
@ -1259,7 +1259,7 @@ func (a *ACL) BindingRuleDelete(bindingRuleID string, q *WriteOptions) (*WriteMe
if err != nil {
return nil, err
}
resp.Body.Close()
closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
return wm, nil
@ -1273,7 +1273,7 @@ func (a *ACL) BindingRuleRead(bindingRuleID string, q *QueryOptions) (*ACLBindin
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -1302,7 +1302,7 @@ func (a *ACL) BindingRuleList(methodName string, q *QueryOptions) ([]*ACLBinding
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -1325,7 +1325,7 @@ func (a *ACL) Login(auth *ACLLoginParams, q *WriteOptions) (*ACLToken, *WriteMet
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out ACLToken
@ -1343,7 +1343,7 @@ func (a *ACL) Logout(q *WriteOptions) (*WriteMeta, error) {
if err != nil {
return nil, err
}
resp.Body.Close()
closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
return wm, nil
@ -1363,7 +1363,7 @@ func (a *ACL) OIDCAuthURL(auth *ACLOIDCAuthURLParams, q *WriteOptions) (string,
if err != nil {
return "", nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out aclOIDCAuthURLResponse
@ -1398,7 +1398,7 @@ func (a *ACL) OIDCCallback(auth *ACLOIDCCallbackParams, q *WriteOptions) (*ACLTo
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out ACLToken

View File

@ -438,7 +438,7 @@ func (a *Agent) Self() (map[string]map[string]interface{}, error) {
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var out map[string]map[string]interface{}
if err := decodeBody(resp, &out); err != nil {
@ -456,7 +456,7 @@ func (a *Agent) Host() (map[string]interface{}, error) {
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var out map[string]interface{}
if err := decodeBody(resp, &out); err != nil {
@ -473,7 +473,7 @@ func (a *Agent) Metrics() (*MetricsInfo, error) {
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var out *MetricsInfo
if err := decodeBody(resp, &out); err != nil {
@ -489,7 +489,7 @@ func (a *Agent) Reload() error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -528,7 +528,7 @@ func (a *Agent) ChecksWithFilterOpts(filter string, q *QueryOptions) (map[string
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var out map[string]*AgentCheck
if err := decodeBody(resp, &out); err != nil {
@ -558,7 +558,7 @@ func (a *Agent) ServicesWithFilterOpts(filter string, q *QueryOptions) (map[stri
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var out map[string]*AgentService
if err := decodeBody(resp, &out); err != nil {
@ -581,7 +581,7 @@ func (a *Agent) AgentHealthServiceByID(serviceID string) (string, *AgentServiceC
if err != nil {
return "", nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
// Service not Found
if resp.StatusCode == http.StatusNotFound {
return HealthCritical, nil, nil
@ -615,7 +615,7 @@ func (a *Agent) AgentHealthServiceByName(service string) (string, []AgentService
if err != nil {
return "", nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
// Service not Found
if resp.StatusCode == http.StatusNotFound {
return HealthCritical, nil, nil
@ -648,7 +648,7 @@ func (a *Agent) Service(serviceID string, q *QueryOptions) (*AgentService, *Quer
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -673,7 +673,7 @@ func (a *Agent) Members(wan bool) ([]*AgentMember, error) {
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var out []*AgentMember
if err := decodeBody(resp, &out); err != nil {
@ -695,7 +695,7 @@ func (a *Agent) MembersOpts(opts MembersOpts) ([]*AgentMember, error) {
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var out []*AgentMember
if err := decodeBody(resp, &out); err != nil {
@ -731,7 +731,7 @@ func (a *Agent) serviceRegister(service *AgentServiceRegistration, opts ServiceR
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -743,7 +743,7 @@ func (a *Agent) ServiceDeregister(serviceID string) error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -756,7 +756,7 @@ func (a *Agent) ServiceDeregisterOpts(serviceID string, q *QueryOptions) error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -811,7 +811,7 @@ func (a *Agent) updateTTL(checkID, note, status string) error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -861,7 +861,7 @@ func (a *Agent) UpdateTTLOpts(checkID, output, status string, q *QueryOptions) e
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -874,7 +874,7 @@ func (a *Agent) CheckRegister(check *AgentCheckRegistration) error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -893,7 +893,7 @@ func (a *Agent) CheckDeregisterOpts(checkID string, q *QueryOptions) error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -908,7 +908,7 @@ func (a *Agent) Join(addr string, wan bool) error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -919,7 +919,7 @@ func (a *Agent) Leave() error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -930,7 +930,7 @@ func (a *Agent) ForceLeave(node string) error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -943,7 +943,7 @@ func (a *Agent) ForceLeavePrune(node string) error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -956,7 +956,7 @@ func (a *Agent) ConnectAuthorize(auth *AgentAuthorizeParams) (*AgentAuthorize, e
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var out AgentAuthorize
if err := decodeBody(resp, &out); err != nil {
@ -973,7 +973,7 @@ func (a *Agent) ConnectCARoots(q *QueryOptions) (*CARootList, *QueryMeta, error)
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -994,7 +994,7 @@ func (a *Agent) ConnectCALeaf(serviceID string, q *QueryOptions) (*LeafCert, *Qu
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -1017,7 +1017,7 @@ func (a *Agent) EnableServiceMaintenance(serviceID, reason string) error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -1030,7 +1030,7 @@ func (a *Agent) DisableServiceMaintenance(serviceID string) error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -1044,7 +1044,7 @@ func (a *Agent) EnableNodeMaintenance(reason string) error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -1057,7 +1057,7 @@ func (a *Agent) DisableNodeMaintenance() error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -1088,7 +1088,7 @@ func (a *Agent) monitor(loglevel string, logJSON bool, stopCh <-chan struct{}, q
}
logCh := make(chan string, 64)
go func() {
defer resp.Body.Close()
defer closeResponseBody(resp)
scanner := bufio.NewScanner(resp.Body)
for {
select {
@ -1196,7 +1196,7 @@ func (a *Agent) updateTokenOnce(target, token string, q *WriteOptions) (*WriteMe
if err != nil {
return nil, 0, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}

View File

@ -939,7 +939,7 @@ func (c *Client) query(endpoint string, out interface{}, q *QueryOptions) (*Quer
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -961,7 +961,7 @@ func (c *Client) write(endpoint string, in, out interface{}, q *WriteOptions) (*
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
if out != nil {
@ -1055,7 +1055,7 @@ func encodeBody(obj interface{}) (io.Reader, error) {
func requireOK(d time.Duration, resp *http.Response, e error) (time.Duration, *http.Response, error) {
if e != nil {
if resp != nil {
resp.Body.Close()
closeResponseBody(resp)
}
return d, nil, e
}
@ -1065,6 +1065,14 @@ func requireOK(d time.Duration, resp *http.Response, e error) (time.Duration, *h
return d, resp, nil
}
// closeResponseBody reads resp.Body until EOF, and then closes it. The read
// is necessary to ensure that the http.Client's underlying RoundTripper is able
// to re-use the TCP connection. See godoc on net/http.Client.Do.
func closeResponseBody(resp *http.Response) error {
_, _ = io.Copy(io.Discard, resp.Body)
return resp.Body.Close()
}
func (req *request) filterQuery(filter string) {
if filter == "" {
return
@ -1079,14 +1087,14 @@ func (req *request) filterQuery(filter string) {
func generateUnexpectedResponseCodeError(resp *http.Response) error {
var buf bytes.Buffer
io.Copy(&buf, resp.Body)
resp.Body.Close()
closeResponseBody(resp)
return fmt.Errorf("Unexpected response code: %d (%s)", resp.StatusCode, buf.Bytes())
}
func requireNotFoundOrOK(d time.Duration, resp *http.Response, e error) (bool, time.Duration, *http.Response, error) {
if e != nil {
if resp != nil {
resp.Body.Close()
closeResponseBody(resp)
}
return false, d, nil, e
}

View File

@ -122,7 +122,7 @@ func (c *Catalog) Register(reg *CatalogRegistration, q *WriteOptions) (*WriteMet
if err != nil {
return nil, err
}
resp.Body.Close()
closeResponseBody(resp)
wm := &WriteMeta{}
wm.RequestTime = rtt
@ -138,7 +138,7 @@ func (c *Catalog) Deregister(dereg *CatalogDeregistration, q *WriteOptions) (*Wr
if err != nil {
return nil, err
}
resp.Body.Close()
closeResponseBody(resp)
wm := &WriteMeta{}
wm.RequestTime = rtt
@ -153,7 +153,7 @@ func (c *Catalog) Datacenters() ([]string, error) {
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var out []string
if err := decodeBody(resp, &out); err != nil {
@ -170,7 +170,7 @@ func (c *Catalog) Nodes(q *QueryOptions) ([]*Node, *QueryMeta, error) {
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -191,7 +191,7 @@ func (c *Catalog) Services(q *QueryOptions) (map[string][]string, *QueryMeta, er
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -248,7 +248,7 @@ func (c *Catalog) service(service string, tags []string, q *QueryOptions, connec
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -269,7 +269,7 @@ func (c *Catalog) Node(node string, q *QueryOptions) (*CatalogNode, *QueryMeta,
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -293,7 +293,7 @@ func (c *Catalog) NodeServiceList(node string, q *QueryOptions) (*CatalogNodeSer
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -314,7 +314,7 @@ func (c *Catalog) GatewayServices(gateway string, q *QueryOptions) ([]*GatewaySe
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)

View File

@ -407,7 +407,7 @@ func (conf *ConfigEntries) Get(kind string, name string, q *QueryOptions) (Confi
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -432,7 +432,7 @@ func (conf *ConfigEntries) List(kind string, q *QueryOptions) ([]ConfigEntry, *Q
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -470,7 +470,7 @@ func (conf *ConfigEntries) set(entry ConfigEntry, params map[string]string, w *W
if err != nil {
return false, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var buf bytes.Buffer
if _, err := io.Copy(&buf, resp.Body); err != nil {
@ -493,7 +493,7 @@ func (conf *ConfigEntries) Delete(kind string, name string, w *WriteOptions) (*W
if err != nil {
return nil, err
}
resp.Body.Close()
closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
return wm, nil
}

View File

@ -138,7 +138,7 @@ func (h *Connect) CARoots(q *QueryOptions) (*CARootList, *QueryMeta, error) {
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -159,7 +159,7 @@ func (h *Connect) CAGetConfig(q *QueryOptions) (*CAConfig, *QueryMeta, error) {
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -181,7 +181,7 @@ func (h *Connect) CASetConfig(conf *CAConfig, q *WriteOptions) (*WriteMeta, erro
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{}
wm.RequestTime = rtt

View File

@ -170,7 +170,7 @@ func (h *Connect) Intentions(q *QueryOptions) ([]*Intention, *QueryMeta, error)
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -194,7 +194,7 @@ func (h *Connect) IntentionGetExact(source, destination string, q *QueryOptions)
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -226,7 +226,7 @@ func (h *Connect) IntentionGet(id string, q *QueryOptions) (*Intention, *QueryMe
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -259,7 +259,7 @@ func (h *Connect) IntentionDeleteExact(source, destination string, q *WriteOptio
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &WriteMeta{}
qm.RequestTime = rtt
@ -277,7 +277,7 @@ func (h *Connect) IntentionDelete(id string, q *WriteOptions) (*WriteMeta, error
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &WriteMeta{}
qm.RequestTime = rtt
@ -303,7 +303,7 @@ func (h *Connect) IntentionMatch(args *IntentionMatch, q *QueryOptions) (map[str
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -330,7 +330,7 @@ func (h *Connect) IntentionCheck(args *IntentionCheck, q *QueryOptions) (bool, *
if err != nil {
return false, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -355,7 +355,7 @@ func (c *Connect) IntentionUpsert(ixn *Intention, q *WriteOptions) (*WriteMeta,
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{}
wm.RequestTime = rtt
@ -382,7 +382,7 @@ func (c *Connect) IntentionCreate(ixn *Intention, q *WriteOptions) (string, *Wri
if err != nil {
return "", nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{}
wm.RequestTime = rtt
@ -406,7 +406,7 @@ func (c *Connect) IntentionUpdate(ixn *Intention, q *WriteOptions) (*WriteMeta,
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{}
wm.RequestTime = rtt

View File

@ -37,7 +37,7 @@ func (c *Coordinate) Datacenters() ([]*CoordinateDatacenterMap, error) {
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var out []*CoordinateDatacenterMap
if err := decodeBody(resp, &out); err != nil {
@ -54,7 +54,7 @@ func (c *Coordinate) Nodes(q *QueryOptions) ([]*CoordinateEntry, *QueryMeta, err
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -76,7 +76,7 @@ func (c *Coordinate) Update(coord *CoordinateEntry, q *WriteOptions) (*WriteMeta
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{}
wm.RequestTime = rtt
@ -92,7 +92,7 @@ func (c *Coordinate) Node(node string, q *QueryOptions) ([]*CoordinateEntry, *Qu
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)

View File

@ -27,7 +27,7 @@ func (d *Debug) Heap() ([]byte, error) {
if err != nil {
return nil, fmt.Errorf("error making request: %s", err)
}
defer resp.Body.Close()
defer closeResponseBody(resp)
if resp.StatusCode != 200 {
return nil, generateUnexpectedResponseCodeError(resp)
@ -54,7 +54,7 @@ func (d *Debug) Profile(seconds int) ([]byte, error) {
if err != nil {
return nil, fmt.Errorf("error making request: %s", err)
}
defer resp.Body.Close()
defer closeResponseBody(resp)
if resp.StatusCode != 200 {
return nil, generateUnexpectedResponseCodeError(resp)
@ -81,7 +81,7 @@ func (d *Debug) Trace(seconds int) ([]byte, error) {
if err != nil {
return nil, fmt.Errorf("error making request: %s", err)
}
defer resp.Body.Close()
defer closeResponseBody(resp)
if resp.StatusCode != 200 {
return nil, generateUnexpectedResponseCodeError(resp)
@ -105,7 +105,7 @@ func (d *Debug) Goroutine() ([]byte, error) {
if err != nil {
return nil, fmt.Errorf("error making request: %s", err)
}
defer resp.Body.Close()
defer closeResponseBody(resp)
if resp.StatusCode != 200 {
return nil, generateUnexpectedResponseCodeError(resp)

View File

@ -43,7 +43,7 @@ func (d *DiscoveryChain) Get(name string, opts *DiscoveryChainOptions, q *QueryO
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)

View File

@ -51,7 +51,7 @@ func (e *Event) Fire(params *UserEvent, q *WriteOptions) (string, *WriteMeta, er
if err != nil {
return "", nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out UserEvent
@ -75,7 +75,7 @@ func (e *Event) List(name string, q *QueryOptions) ([]*UserEvent, *QueryMeta, er
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)

View File

@ -234,7 +234,7 @@ func (h *Health) Node(node string, q *QueryOptions) (HealthChecks, *QueryMeta, e
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -255,7 +255,7 @@ func (h *Health) Checks(service string, q *QueryOptions) (HealthChecks, *QueryMe
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -332,7 +332,7 @@ func (h *Health) service(service string, tags []string, passingOnly bool, q *Que
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -362,7 +362,7 @@ func (h *Health) State(state string, q *QueryOptions) (HealthChecks, *QueryMeta,
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)

View File

@ -69,7 +69,7 @@ func (k *KV) Get(key string, q *QueryOptions) (*KVPair, *QueryMeta, error) {
if resp == nil {
return nil, qm, nil
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var entries []*KVPair
if err := decodeBody(resp, &entries); err != nil {
@ -90,7 +90,7 @@ func (k *KV) List(prefix string, q *QueryOptions) (KVPairs, *QueryMeta, error) {
if resp == nil {
return nil, qm, nil
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var entries []*KVPair
if err := decodeBody(resp, &entries); err != nil {
@ -113,7 +113,7 @@ func (k *KV) Keys(prefix, separator string, q *QueryOptions) ([]string, *QueryMe
if resp == nil {
return nil, qm, nil
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var entries []string
if err := decodeBody(resp, &entries); err != nil {
@ -138,10 +138,10 @@ func (k *KV) getInternal(key string, params map[string]string, q *QueryOptions)
qm.RequestTime = rtt
if resp.StatusCode == 404 {
resp.Body.Close()
closeResponseBody(resp)
return nil, qm, nil
} else if resp.StatusCode != 200 {
resp.Body.Close()
closeResponseBody(resp)
return nil, nil, fmt.Errorf("Unexpected response code: %d", resp.StatusCode)
}
return resp, qm, nil
@ -210,7 +210,7 @@ func (k *KV) put(key string, params map[string]string, body []byte, q *WriteOpti
if err != nil {
return false, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &WriteMeta{}
qm.RequestTime = rtt
@ -254,7 +254,7 @@ func (k *KV) deleteInternal(key string, params map[string]string, q *WriteOption
if err != nil {
return false, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &WriteMeta{}
qm.RequestTime = rtt

View File

@ -67,7 +67,7 @@ func (n *Namespaces) Create(ns *Namespace, q *WriteOptions) (*Namespace, *WriteM
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out Namespace
@ -90,7 +90,7 @@ func (n *Namespaces) Update(ns *Namespace, q *WriteOptions) (*Namespace, *WriteM
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
var out Namespace
@ -109,7 +109,7 @@ func (n *Namespaces) Read(name string, q *QueryOptions) (*Namespace, *QueryMeta,
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
@ -132,7 +132,7 @@ func (n *Namespaces) Delete(name string, q *WriteOptions) (*WriteMeta, error) {
if err != nil {
return nil, err
}
resp.Body.Close()
closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}
return wm, nil
@ -146,7 +146,7 @@ func (n *Namespaces) List(q *QueryOptions) ([]*Namespace, *QueryMeta, error) {
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)

View File

@ -93,7 +93,7 @@ func (op *Operator) AreaCreate(area *Area, q *WriteOptions) (string, *WriteMeta,
if err != nil {
return "", nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{}
wm.RequestTime = rtt
@ -114,7 +114,7 @@ func (op *Operator) AreaUpdate(areaID string, area *Area, q *WriteOptions) (stri
if err != nil {
return "", nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{}
wm.RequestTime = rtt
@ -154,7 +154,7 @@ func (op *Operator) AreaDelete(areaID string, q *WriteOptions) (*WriteMeta, erro
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{}
wm.RequestTime = rtt
@ -171,7 +171,7 @@ func (op *Operator) AreaJoin(areaID string, addresses []string, q *WriteOptions)
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{}
wm.RequestTime = rtt

View File

@ -284,7 +284,7 @@ func (op *Operator) AutopilotGetConfiguration(q *QueryOptions) (*AutopilotConfig
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var out AutopilotConfiguration
if err := decodeBody(resp, &out); err != nil {
@ -303,7 +303,7 @@ func (op *Operator) AutopilotSetConfiguration(conf *AutopilotConfiguration, q *W
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -319,7 +319,7 @@ func (op *Operator) AutopilotCASConfiguration(conf *AutopilotConfiguration, q *W
if err != nil {
return false, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var buf bytes.Buffer
if _, err := io.Copy(&buf, resp.Body); err != nil {
@ -340,7 +340,7 @@ func (op *Operator) AutopilotServerHealth(q *QueryOptions) (*OperatorHealthReply
_, resp, err := op.c.doRequest(r)
if err != nil {
if resp != nil {
resp.Body.Close()
closeResponseBody(resp)
}
return nil, err
}
@ -351,7 +351,7 @@ func (op *Operator) AutopilotServerHealth(q *QueryOptions) (*OperatorHealthReply
return nil, generateUnexpectedResponseCodeError(resp)
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var out OperatorHealthReply
if err := decodeBody(resp, &out); err != nil {
@ -367,7 +367,7 @@ func (op *Operator) AutopilotState(q *QueryOptions) (*AutopilotState, error) {
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var out AutopilotState
if err := decodeBody(resp, &out); err != nil {

View File

@ -40,7 +40,7 @@ func (op *Operator) KeyringInstall(key string, q *WriteOptions) error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -52,7 +52,7 @@ func (op *Operator) KeyringList(q *QueryOptions) ([]*KeyringResponse, error) {
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var out []*KeyringResponse
if err := decodeBody(resp, &out); err != nil {
@ -72,7 +72,7 @@ func (op *Operator) KeyringRemove(key string, q *WriteOptions) error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -87,6 +87,6 @@ func (op *Operator) KeyringUse(key string, q *WriteOptions) error {
if err != nil {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}

View File

@ -66,7 +66,7 @@ func (op *Operator) LicenseGetSigned(q *QueryOptions) (string, error) {
if err != nil {
return "", err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
data, err := ioutil.ReadAll(resp.Body)
if err != nil {

View File

@ -44,7 +44,7 @@ func (op *Operator) RaftGetConfiguration(q *QueryOptions) (*RaftConfiguration, e
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var out RaftConfiguration
if err := decodeBody(resp, &out); err != nil {
@ -67,7 +67,7 @@ func (op *Operator) RaftRemovePeerByAddress(address string, q *WriteOptions) err
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}
@ -84,6 +84,6 @@ func (op *Operator) RaftRemovePeerByID(id string, q *WriteOptions) error {
return err
}
resp.Body.Close()
closeResponseBody(resp)
return nil
}

View File

@ -158,7 +158,7 @@ func (c *PreparedQuery) Create(query *PreparedQueryDefinition, q *WriteOptions)
if err != nil {
return "", nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{}
wm.RequestTime = rtt
@ -204,7 +204,7 @@ func (c *PreparedQuery) Delete(queryID string, q *WriteOptions) (*WriteMeta, err
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{}
wm.RequestTime = rtt

View File

@ -141,7 +141,7 @@ func (s *Session) Renew(id string, q *WriteOptions) (*SessionEntry, *WriteMeta,
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
wm := &WriteMeta{RequestTime: rtt}

View File

@ -22,7 +22,7 @@ func (s *Status) LeaderWithQueryOptions(q *QueryOptions) (string, error) {
if err != nil {
return "", err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var leader string
if err := decodeBody(resp, &leader); err != nil {
@ -47,7 +47,7 @@ func (s *Status) PeersWithQueryOptions(q *QueryOptions) ([]string, error) {
if err != nil {
return nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
var peers []string
if err := decodeBody(resp, &peers); err != nil {

View File

@ -221,7 +221,7 @@ func (c *Client) txn(txn TxnOps, q *QueryOptions) (bool, *TxnResponse, *QueryMet
if err != nil {
return false, nil, nil, err
}
defer resp.Body.Close()
defer closeResponseBody(resp)
qm := &QueryMeta{}
parseQueryMeta(resp, qm)