Merge branch '21666-provision-test-improvement'
[arvados.git] / sdk / go / arvados / client.go
index e3c14326600189ed92f0b5af14db83f244d010f5..09185d1d6be2f7c8dc1136603b9ce11dc0f304e2 100644 (file)
@@ -32,6 +32,7 @@ import (
 
        "git.arvados.org/arvados.git/sdk/go/httpserver"
        "github.com/hashicorp/go-retryablehttp"
+       "github.com/sirupsen/logrus"
 )
 
 // A Client is an HTTP client with an API endpoint and a set of
@@ -77,6 +78,14 @@ type Client struct {
        // context deadline to establish a maximum request time.
        Timeout time.Duration
 
+       // Maximum disk cache size in bytes or percent of total
+       // filesystem size. If zero, use default, currently 10% of
+       // filesystem size.
+       DiskCacheSize ByteSizeOrPercent
+
+       // Where to write debug logs. May be nil.
+       Logger logrus.FieldLogger
+
        dd *DiscoveryDocument
 
        defaultRequestID string
@@ -154,6 +163,7 @@ func NewClientFromConfig(cluster *Cluster) (*Client, error) {
                APIHost:        ctrlURL.Host,
                Insecure:       cluster.TLS.Insecure,
                Timeout:        5 * time.Minute,
+               DiskCacheSize:  cluster.Collections.WebDAVCache.DiskCacheSize,
                requestLimiter: &requestLimiter{maxlimit: int64(cluster.API.MaxConcurrentRequests / 4)},
        }, nil
 }
@@ -301,6 +311,11 @@ func (c *Client) Do(req *http.Request) (*http.Response, error) {
                if c.Timeout == 0 {
                        return false, nil
                }
+               // This check can be removed when
+               // https://github.com/hashicorp/go-retryablehttp/pull/210
+               // (or equivalent) is merged and we update go.mod.
+               // Until then, it is needed to pass
+               // TestNonRetryableStdlibError.
                if respErr != nil && reqErrorRe.MatchString(respErr.Error()) {
                        return false, nil
                }