7724: Use a scoped token in data manager tests.
[arvados.git] / sdk / go / keepclient / keepclient.go
index a018eb40f787d963ce571b50f6f87655882bdf6d..0e6fadcc3548c99d2e85c30219a74ffdce42bf72 100644 (file)
@@ -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{