X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/6e307516327390389ab265560cfb0693a4582210..1acdfd97cb761eed9357b8c0e59ab80dc56c2652:/sdk/go/keepclient/support.go diff --git a/sdk/go/keepclient/support.go b/sdk/go/keepclient/support.go index a2787c5441..c24849e687 100644 --- a/sdk/go/keepclient/support.go +++ b/sdk/go/keepclient/support.go @@ -28,36 +28,63 @@ func Md5String(s string) string { return fmt.Sprintf("%x", md5.Sum([]byte(s))) } -func (this *KeepClient) DiscoverKeepServers() error { - if prx := os.Getenv("ARVADOS_KEEP_PROXY"); prx != "" { - sr := map[string]string{"proxy": prx} - this.SetServiceRoots(sr) - this.Using_proxy = true - if this.Client.Timeout == 0 { - // See MakeKeepClient for notes on meaning of timeouts. - this.Client.Timeout = 300 * time.Second - this.Client.Transport = &http.Transport{ - Dial: (&net.Dialer{ - Timeout: 30 * time.Second, - KeepAlive: 60 * time.Second, - }).Dial, - TLSHandshakeTimeout: 10 * time.Second, - } +// Set timeouts apply when connecting to keepproxy services (assumed to be over +// the Internet). +func (this *KeepClient) setClientSettingsProxy() { + if this.Client.Timeout == 0 { + // Maximum time to wait for a complete response + this.Client.Timeout = 300 * time.Second + + // TCP and TLS connection settings + this.Client.Transport = &http.Transport{ + Dial: (&net.Dialer{ + // The maximum time to wait to set up + // the initial TCP connection. + Timeout: 30 * time.Second, + + // The TCP keep alive heartbeat + // interval. + KeepAlive: 120 * time.Second, + }).Dial, + + TLSHandshakeTimeout: 10 * time.Second, } - return nil } +} + +// Set timeouts apply when connecting to keepstore services directly (assumed +// to be on the local network). +func (this *KeepClient) setClientSettingsStore() { if this.Client.Timeout == 0 { - // See MakeKeepClient for notes on meaning of timeouts. + // Maximum time to wait for a complete response this.Client.Timeout = 20 * time.Second + + // TCP and TLS connection timeouts this.Client.Transport = &http.Transport{ Dial: (&net.Dialer{ - Timeout: 2 * time.Second, - KeepAlive: 60 * time.Second, + // The maximum time to wait to set up + // the initial TCP connection. + Timeout: 2 * time.Second, + + // The TCP keep alive heartbeat + // interval. + KeepAlive: 180 * time.Second, }).Dial, - TLSHandshakeTimeout: 10 * time.Second, + + TLSHandshakeTimeout: 4 * time.Second, } } +} + +func (this *KeepClient) DiscoverKeepServers() error { + if prx := os.Getenv("ARVADOS_KEEP_PROXY"); prx != "" { + sr := map[string]string{"proxy": prx} + this.SetServiceRoots(sr) + this.Using_proxy = true + this.setClientSettingsProxy() + return nil + } type svcList struct { Items []keepDisk `json:"items"` @@ -95,6 +122,12 @@ func (this *KeepClient) DiscoverKeepServers() error { } } + if this.Using_proxy { + this.setClientSettingsProxy() + } else { + this.setClientSettingsStore() + } + this.SetServiceRoots(service_roots) return nil