projects
/
arvados.git
/ commitdiff
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
1d1c6de
)
5538: close any idle connections before a POST or DELETE request.
author
radhika <radhika@curoverse.com>
Wed, 4 Nov 2015 16:34:35 +0000
(11:34 -0500)
committer
radhika <radhika@curoverse.com>
Wed, 4 Nov 2015 16:34:35 +0000
(11:34 -0500)
sdk/go/arvadosclient/arvadosclient.go
patch
|
blob
|
history
diff --git
a/sdk/go/arvadosclient/arvadosclient.go
b/sdk/go/arvadosclient/arvadosclient.go
index 1cce0a7fc92d24e21fa694add86c75c63952eb46..1bc6f80f2cae1a2e17db60f2d5f844f542233f1e 100644
(file)
--- a/
sdk/go/arvadosclient/arvadosclient.go
+++ b/
sdk/go/arvadosclient/arvadosclient.go
@@
-14,6
+14,7
@@
import (
"os"
"regexp"
"strings"
"os"
"regexp"
"strings"
+ "time"
)
type StringMatcher func(string) bool
)
type StringMatcher func(string) bool
@@
-25,6
+26,9
@@
var MissingArvadosApiHost = errors.New("Missing required environment variable AR
var MissingArvadosApiToken = errors.New("Missing required environment variable ARVADOS_API_TOKEN")
var ErrInvalidArgument = errors.New("Invalid argument")
var MissingArvadosApiToken = errors.New("Missing required environment variable ARVADOS_API_TOKEN")
var ErrInvalidArgument = errors.New("Invalid argument")
+// Before a POST or DELERE request, close any connections that were idle for this long
+var MaxIdleConnectionDuration = 30 * time.Second
+
// Indicates an error that was returned by the API server.
type APIServerError struct {
// Address of server returning error, of the form "host:port".
// Indicates an error that was returned by the API server.
type APIServerError struct {
// Address of server returning error, of the form "host:port".
@@
-76,6
+80,8
@@
type ArvadosClient struct {
// Discovery document
DiscoveryDoc Dict
// Discovery document
DiscoveryDoc Dict
+
+ lastClosedIdlesAt time.Time
}
// Create a new ArvadosClient, initialized with standard Arvados environment
}
// Create a new ArvadosClient, initialized with standard Arvados environment
@@
-101,6
+107,8
@@
func MakeArvadosClient() (ac ArvadosClient, err error) {
return ac, MissingArvadosApiToken
}
return ac, MissingArvadosApiToken
}
+ ac.lastClosedIdlesAt = time.Now()
+
return ac, err
}
return ac, err
}
@@
-158,6
+166,14
@@
func (c ArvadosClient) CallRaw(method string, resourceType string, uuid string,
req.Header.Add("X-External-Client", "1")
}
req.Header.Add("X-External-Client", "1")
}
+ // Before a POST or DELETE, close any idle connections
+ if method == "POST" || method == "DELETE" {
+ if time.Since(c.lastClosedIdlesAt) > MaxIdleConnectionDuration {
+ c.lastClosedIdlesAt = time.Now()
+ c.Client.Transport.(*http.Transport).CloseIdleConnections()
+ }
+ }
+
// Make the request
var resp *http.Response
if resp, err = c.Client.Do(req); err != nil {
// Make the request
var resp *http.Response
if resp, err = c.Client.Do(req); err != nil {