X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/da453701654115387e6b11189c6a830f24abf715..f5dda9d0b27a65918d53909c265c42f4da2f83e1:/sdk/go/keepclient/keepclient.go diff --git a/sdk/go/keepclient/keepclient.go b/sdk/go/keepclient/keepclient.go index a018eb40f7..0e6fadcc35 100644 --- a/sdk/go/keepclient/keepclient.go +++ b/sdk/go/keepclient/keepclient.go @@ -169,10 +169,14 @@ func (kc *KeepClient) PutR(r io.Reader) (locator string, replicas int, err error func (kc *KeepClient) getOrHead(method string, locator string) (io.ReadCloser, int64, string, error) { var errs []string - var count404 int tries_remaining := 1 + kc.Retries + serversToTry := kc.getSortedRoots(locator) + + numServers := len(serversToTry) + count404 := 0 + var retryList []string for tries_remaining > 0 { @@ -196,7 +200,7 @@ func (kc *KeepClient) getOrHead(method string, locator string) (io.ReadCloser, i retryList = append(retryList, host) } else if resp.StatusCode != http.StatusOK { var respbody []byte - respbody, _ = ioutil.ReadAll(&io.LimitedReader{resp.Body, 4096}) + respbody, _ = ioutil.ReadAll(&io.LimitedReader{R: resp.Body, N: 4096}) resp.Body.Close() errs = append(errs, fmt.Sprintf("%s: HTTP %d %q", url, resp.StatusCode, bytes.TrimSpace(respbody))) @@ -231,7 +235,7 @@ func (kc *KeepClient) getOrHead(method string, locator string) (io.ReadCloser, i log.Printf("DEBUG: %s %s failed: %v", method, locator, errs) var err error - if count404 == len(kc.getSortedRoots(locator)) { + if count404 == numServers { err = BlockNotFound } else { err = &ErrNotFound{multipleResponseError{