19428: Fix leading "/" in path, skip the 301 redirect.
[arvados.git] / services / keep-web / cache.go
index d5fdc4997ecee3c67d1cc8ea4003c2c1e3f6cac4..b08abad85d4290bf939d2ee9a1029cf9a9f7d464 100644 (file)
@@ -276,7 +276,7 @@ func (c *cache) pruneSessions() {
        now := time.Now()
        var size int64
        keys := c.sessions.Keys()
-       for _, token := range keys {
+       for idx, token := range keys {
                ent, ok := c.sessions.Peek(token)
                if !ok {
                        continue
@@ -284,6 +284,7 @@ func (c *cache) pruneSessions() {
                s := ent.(*cachedSession)
                if s.expire.Before(now) {
                        c.sessions.Remove(token)
+                       keys[idx] = ""
                        continue
                }
                if fs, ok := s.fs.Load().(arvados.CustomFileSystem); ok {
@@ -294,6 +295,12 @@ func (c *cache) pruneSessions() {
        // least frequently used entries (which Keys() returns last).
        for i := len(keys) - 1; i >= 0; i-- {
                token := keys[i]
+               if token == "" {
+                       // removed this session in the loop above;
+                       // don't prune it, even if it's already been
+                       // reinserted.
+                       continue
+               }
                if size <= c.cluster.Collections.WebDAVCache.MaxCollectionBytes/2 {
                        break
                }
@@ -500,7 +507,7 @@ func (c *cache) GetTokenUser(token string) (*arvados.User, error) {
        c.metrics.apiCalls.Inc()
        var current arvados.User
 
-       err = sess.client.RequestAndDecode(&current, "GET", "/arvados/v1/users/current", nil, nil)
+       err = sess.client.RequestAndDecode(&current, "GET", "arvados/v1/users/current", nil, nil)
        if err != nil {
                return nil, err
        }