X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/374cc9ffdd945cec08abbc3ff91b4b2b147cd840..1e40702405d04143caa05c9580cce79c293d40d7:/services/keep-web/handler.go diff --git a/services/keep-web/handler.go b/services/keep-web/handler.go index 643ca4f587..915924e288 100644 --- a/services/keep-web/handler.go +++ b/services/keep-web/handler.go @@ -227,6 +227,10 @@ func (h *handler) ServeHTTP(wOrig http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Expose-Headers", "Content-Range") } + if h.serveS3(w, r) { + return + } + pathParts := strings.Split(r.URL.Path[1:], "/") var stripParts int @@ -509,6 +513,27 @@ func (h *handler) ServeHTTP(wOrig http.ResponseWriter, r *http.Request) { } } +func (h *handler) getClients(reqID, token string) (arv *arvadosclient.ArvadosClient, kc *keepclient.KeepClient, client *arvados.Client, release func(), err error) { + arv = h.clientPool.Get() + if arv == nil { + return nil, nil, nil, nil, err + } + release = func() { h.clientPool.Put(arv) } + arv.ApiToken = token + kc, err = keepclient.MakeKeepClient(arv) + if err != nil { + release() + return + } + kc.RequestID = reqID + client = (&arvados.Client{ + APIHost: arv.ApiServer, + AuthToken: arv.ApiToken, + Insecure: arv.ApiInsecure, + }).WithRequestID(reqID) + return +} + func (h *handler) serveSiteFS(w http.ResponseWriter, r *http.Request, tokens []string, credentialsOK, attachment bool) { if len(tokens) == 0 { w.Header().Add("WWW-Authenticate", "Basic realm=\"collections\"") @@ -519,25 +544,13 @@ func (h *handler) serveSiteFS(w http.ResponseWriter, r *http.Request, tokens []s http.Error(w, errReadOnly.Error(), http.StatusMethodNotAllowed) return } - arv := h.clientPool.Get() - if arv == nil { + _, kc, client, release, err := h.getClients(r.Header.Get("X-Request-Id"), tokens[0]) + if err != nil { http.Error(w, "Pool failed: "+h.clientPool.Err().Error(), http.StatusInternalServerError) return } - defer h.clientPool.Put(arv) - arv.ApiToken = tokens[0] + defer release() - kc, err := keepclient.MakeKeepClient(arv) - if err != nil { - http.Error(w, "error setting up keep client: "+err.Error(), http.StatusInternalServerError) - return - } - kc.RequestID = r.Header.Get("X-Request-Id") - client := (&arvados.Client{ - APIHost: arv.ApiServer, - AuthToken: arv.ApiToken, - Insecure: arv.ApiInsecure, - }).WithRequestID(r.Header.Get("X-Request-Id")) fs := client.SiteFileSystem(kc) fs.ForwardSlashNameSubstitution(h.Config.cluster.Collections.ForwardSlashNameSubstitution) f, err := fs.Open(r.URL.Path)