X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d3229c7f727f40436cad66fba5f3345e0b3eede5..51bae325be042ecfc2469eb9838671e1663e6a99:/sdk/go/keepclient/keepclient.go diff --git a/sdk/go/keepclient/keepclient.go b/sdk/go/keepclient/keepclient.go index 326c2a06ae..4733bb7629 100644 --- a/sdk/go/keepclient/keepclient.go +++ b/sdk/go/keepclient/keepclient.go @@ -2,11 +2,11 @@ package keepclient import ( - "git.curoverse.com/arvados.git/sdk/go/streamer" - "git.curoverse.com/arvados.git/sdk/go/arvadosclient" "crypto/md5" "errors" "fmt" + "git.curoverse.com/arvados.git/sdk/go/arvadosclient" + "git.curoverse.com/arvados.git/sdk/go/streamer" "io" "io/ioutil" "log" @@ -15,6 +15,7 @@ import ( "strings" "sync" "sync/atomic" + "time" "unsafe" ) @@ -47,7 +48,7 @@ func MakeKeepClient(arv *arvadosclient.ArvadosClient) (kc KeepClient, err error) Arvados: arv, Want_replicas: 2, Using_proxy: false, - Client: &http.Client{Transport: &http.Transport{}}} + Client: &http.Client{Transport: &http.Transport{}, Timeout: 10 * time.Minute}} err = (&kc).DiscoverKeepServers() @@ -131,6 +132,10 @@ func (this KeepClient) AuthorizedGet(hash string, timestamp string) (reader io.ReadCloser, contentLength int64, url string, err error) { + // Take the hash of locator and timestamp in order to identify this + // specific transaction in log statements. + tag := fmt.Sprintf("%x", md5.Sum([]byte(hash+time.Now().String())))[0:8] + // Calculate the ordering for asking servers sv := NewRootSorter(this.ServiceRoots(), hash).GetSortedRoots() @@ -150,12 +155,19 @@ func (this KeepClient) AuthorizedGet(hash string, req.Header.Add("Authorization", fmt.Sprintf("OAuth2 %s", this.Arvados.ApiToken)) + log.Printf("[%v] Begin download %s", tag, url) + var resp *http.Response - if resp, err = this.Client.Do(req); err != nil { + if resp, err = this.Client.Do(req); err != nil || resp.StatusCode != http.StatusOK { + respbody, _ := ioutil.ReadAll(&io.LimitedReader{resp.Body, 4096}) + response := strings.TrimSpace(string(respbody)) + log.Printf("[%v] Download %v status code: %v error: '%v' response: '%v'", + tag, url, resp.StatusCode, err, response) continue } if resp.StatusCode == http.StatusOK { + log.Printf("[%v] Download %v status code: %v", tag, url, resp.StatusCode) return HashCheckingReader{resp.Body, md5.New(), hash}, resp.ContentLength, url, nil } }