16745: Keep a SiteFileSystem alive for multiple read requests.
[arvados.git] / services / keep-web / handler.go
index 2d6fb78f8098a7752a2e9075f8ea84ca537c445f..4ea2fa2f6dea89af1b3a744b09a2da6d36e61169 100644 (file)
@@ -520,7 +520,8 @@ 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
+               err = h.clientPool.Err()
+               return
        }
        release = func() { h.clientPool.Put(arv) }
        arv.ApiToken = token
@@ -548,14 +549,11 @@ func (h *handler) serveSiteFS(w http.ResponseWriter, r *http.Request, tokens []s
                http.Error(w, errReadOnly.Error(), http.StatusMethodNotAllowed)
                return
        }
-       _, kc, client, release, err := h.getClients(r.Header.Get("X-Request-Id"), tokens[0])
+       fs, err := h.Config.Cache.GetSession(tokens[0])
        if err != nil {
-               http.Error(w, "Pool failed: "+h.clientPool.Err().Error(), http.StatusInternalServerError)
+               http.Error(w, err.Error(), http.StatusInternalServerError)
                return
        }
-       defer release()
-
-       fs := client.SiteFileSystem(kc)
        fs.ForwardSlashNameSubstitution(h.Config.cluster.Collections.ForwardSlashNameSubstitution)
        f, err := fs.Open(r.URL.Path)
        if os.IsNotExist(err) {