X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d53271e587b7bdbfe37b8ae8eaf890dd69c2796b..3e4f591181a38d739d94cf9321f874c19937d199:/services/keepproxy/keepproxy.go diff --git a/services/keepproxy/keepproxy.go b/services/keepproxy/keepproxy.go index f2a93f1e3a..d3dbeaf89e 100644 --- a/services/keepproxy/keepproxy.go +++ b/services/keepproxy/keepproxy.go @@ -362,7 +362,7 @@ func (this GetBlockHandler) ServeHTTP(resp http.ResponseWriter, req *http.Reques log.Println("Warning:", GetRemoteAddress(req), req.Method, proxiedURI, "Content-Length not provided") } - switch err { + switch respErr := err.(type) { case nil: status = http.StatusOK resp.Header().Set("Content-Length", fmt.Sprint(expectLength)) @@ -375,10 +375,16 @@ func (this GetBlockHandler) ServeHTTP(resp http.ResponseWriter, req *http.Reques err = ContentLengthMismatch } } - case keepclient.BlockNotFound: - status = http.StatusNotFound + case keepclient.Error: + if respErr == keepclient.BlockNotFound { + status = http.StatusNotFound + } else if respErr.Temporary() { + status = http.StatusBadGateway + } else { + status = 422 + } default: - status = http.StatusBadGateway + status = http.StatusInternalServerError } } @@ -515,16 +521,15 @@ func (handler IndexHandler) ServeHTTP(resp http.ResponseWriter, req *http.Reques kc := *handler.KeepClient - var pass bool - var tok string - if pass, tok = CheckAuthorizationHeader(kc, handler.ApiTokenCache, req); !pass { + ok, token := CheckAuthorizationHeader(kc, handler.ApiTokenCache, req) + if !ok { status, err = http.StatusForbidden, BadAuthorizationHeader return } // Copy ArvadosClient struct and use the client's API token arvclient := *kc.Arvados - arvclient.ApiToken = tok + arvclient.ApiToken = token kc.Arvados = &arvclient // Only GET method is supported @@ -533,6 +538,7 @@ func (handler IndexHandler) ServeHTTP(resp http.ResponseWriter, req *http.Reques return } + // Get index from all LocalRoots and write to resp var reader io.Reader for uuid := range kc.LocalRoots() { reader, err = kc.GetIndex(uuid, prefix) @@ -541,15 +547,7 @@ func (handler IndexHandler) ServeHTTP(resp http.ResponseWriter, req *http.Reques return } - var readBytes []byte - readBytes, err = ioutil.ReadAll(reader) - if err != nil { - status = http.StatusBadGateway - return - } - - // Got index for this server; write to resp - _, err := resp.Write(readBytes) + _, err = io.Copy(resp, reader) if err != nil { status = http.StatusBadGateway return