diff --git a/main.go b/main.go index 292fa67a15..cf5f48411b 100644 --- a/main.go +++ b/main.go @@ -21,9 +21,11 @@ package main import ( + "crypto/tls" "fmt" "io/ioutil" "log" + "net/http" "os" "os/signal" "path" @@ -46,6 +48,17 @@ import ( "github.com/kardianos/osext" ) +// httpTransport is a transport with HTTP/2 disabled. This is to work around +// very high memory usage for our read pattern (http://golang.org/issue/15930) +// and can be removed when we're building with a version of Go that has that +// issue fixed. +var httpTransport = func() *http.Transport { + t := &http.Transport{} + *t = *(http.DefaultTransport.(*http.Transport)) + t.TLSNextProto = map[string]func(string, *tls.Conn) http.RoundTripper{} + return t +}() + //////////////////////////////////////////////////////////////////////// // Helpers //////////////////////////////////////////////////////////////////////// @@ -205,6 +218,7 @@ func getConn(flags *flagStorage) (c gcs.Conn, err error) { const userAgent = "gcsfuse/0.0" cfg := &gcs.ConnConfig{ TokenSource: tokenSrc, + Transport: httpTransport, UserAgent: userAgent, } diff --git a/vendor/github.com/jacobsa/gcloud/gcs/conn.go b/vendor/github.com/jacobsa/gcloud/gcs/conn.go index 197713ce75..2b0a7982c6 100644 --- a/vendor/github.com/jacobsa/gcloud/gcs/conn.go +++ b/vendor/github.com/jacobsa/gcloud/gcs/conn.go @@ -60,6 +60,10 @@ type ConnConfig struct { // empty, a default will be used. UserAgent string + // The HTTP transport to use for communication with GCS. If not supplied, + // http.DefaultTransport will be used. + Transport httputil.CancellableRoundTripper + // The maximum amount of time to spend sleeping in a retry loop with // exponential backoff for failed requests. The default of zero disables // automatic retries. @@ -93,8 +97,13 @@ func NewConn(cfg *ConnConfig) (c Conn, err error) { userAgent = defaultUserAgent } + // Choose the basic transport. + transport := cfg.Transport + if cfg.HTTPDebugLogger != nil { + transport = http.DefaultTransport.(httputil.CancellableRoundTripper) + } + // Enable HTTP debugging if requested. - transport := http.DefaultTransport.(httputil.CancellableRoundTripper) if cfg.HTTPDebugLogger != nil { transport = httputil.DebuggingRoundTripper(transport, cfg.HTTPDebugLogger) } diff --git a/vendor/vendor.json b/vendor/vendor.json index 5c057401bc..6acd0ed85a 100755 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -61,29 +61,34 @@ "revisionTime": "2016-05-16T00:07:28Z" }, { + "checksumSHA1": "v79niRn3bst9dPvawWXCi0BRYS8=", "path": "github.com/jacobsa/gcloud/gcs", - "revision": "60dc0c7874d8adf958f7ded1e2edda4d7b3e8318", - "revisionTime": "2016-02-19T11:39:26+11:00" + "revision": "e9e54fcd1efc94e58b06aed435eca4b3f837da71", + "revisionTime": "2016-06-02T12:04:01Z" }, { + "checksumSHA1": "NpZ4b33firshwopE9w/rzHFMIxg=", "path": "github.com/jacobsa/gcloud/gcs/gcscaching", - "revision": "60dc0c7874d8adf958f7ded1e2edda4d7b3e8318", - "revisionTime": "2016-02-19T11:39:26+11:00" + "revision": "e9e54fcd1efc94e58b06aed435eca4b3f837da71", + "revisionTime": "2016-06-02T12:04:01Z" }, { + "checksumSHA1": "4eF64wIG1vvwDIWOUr355L7zpMQ=", "path": "github.com/jacobsa/gcloud/gcs/gcsfake", - "revision": "60dc0c7874d8adf958f7ded1e2edda4d7b3e8318", - "revisionTime": "2016-02-19T11:39:26+11:00" + "revision": "e9e54fcd1efc94e58b06aed435eca4b3f837da71", + "revisionTime": "2016-06-02T12:04:01Z" }, { + "checksumSHA1": "1gvrpwRo8EnLnufGFGtzcyfUeIk=", "path": "github.com/jacobsa/gcloud/gcs/gcsutil", - "revision": "60dc0c7874d8adf958f7ded1e2edda4d7b3e8318", - "revisionTime": "2016-02-19T11:39:26+11:00" + "revision": "e9e54fcd1efc94e58b06aed435eca4b3f837da71", + "revisionTime": "2016-06-02T12:04:01Z" }, { + "checksumSHA1": "ub1Nzd6BdY10XoHOu3YVdS/6Tok=", "path": "github.com/jacobsa/gcloud/httputil", - "revision": "60dc0c7874d8adf958f7ded1e2edda4d7b3e8318", - "revisionTime": "2016-02-19T11:39:26+11:00" + "revision": "e9e54fcd1efc94e58b06aed435eca4b3f837da71", + "revisionTime": "2016-06-02T12:04:01Z" }, { "path": "github.com/jacobsa/oglematchers",