16745: Keep a SiteFileSystem alive for multiple read requests.
[arvados.git] / services / keep-web / handler.go
index 8e427403837f073da65d931b9646dc38a7d972b6..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) {
@@ -773,6 +771,7 @@ func (h *handler) seeOtherWithCookie(w http.ResponseWriter, r *http.Request, loc
                        Value:    auth.EncodeTokenCookie([]byte(formToken)),
                        Path:     "/",
                        HttpOnly: true,
+                       SameSite: http.SameSiteLaxMode,
                })
        }