Merge branch '19362-all-webdav-via-sitefs'
[arvados.git] / services / keep-web / cache.go
index 3ba3e60abdad599bc5622e9cf5583f2422e81786..db06d635092a3ee36daed2d3b72fe1b1b738a909 100644 (file)
@@ -185,9 +185,10 @@ func (c *cache) GetSession(token string) (arvados.CustomFileSystem, *cachedSessi
 // until approximate remaining size <= maxsize/2
 func (c *cache) pruneSessions() {
        now := time.Now()
-       var size int64
        keys := c.sessions.Keys()
-       for _, token := range keys {
+       sizes := make([]int64, len(keys))
+       var size int64
+       for i, token := range keys {
                ent, ok := c.sessions.Peek(token)
                if !ok {
                        continue
@@ -198,27 +199,17 @@ func (c *cache) pruneSessions() {
                        continue
                }
                if fs, ok := s.fs.Load().(arvados.CustomFileSystem); ok {
-                       size += fs.MemorySize()
+                       sizes[i] = fs.MemorySize()
+                       size += sizes[i]
                }
        }
        // Remove tokens until reaching size limit, starting with the
        // least frequently used entries (which Keys() returns last).
-       for i := len(keys) - 1; i >= 0; i-- {
-               token := keys[i]
-               if size <= c.cluster.Collections.WebDAVCache.MaxCollectionBytes {
-                       break
-               }
-               ent, ok := c.sessions.Peek(token)
-               if !ok {
-                       continue
-               }
-               s := ent.(*cachedSession)
-               fs, _ := s.fs.Load().(arvados.CustomFileSystem)
-               if fs == nil {
-                       continue
+       for i := len(keys) - 1; i >= 0 && size > c.cluster.Collections.WebDAVCache.MaxCollectionBytes; i-- {
+               if sizes[i] > 0 {
+                       c.sessions.Remove(keys[i])
+                       size -= sizes[i]
                }
-               c.sessions.Remove(token)
-               size -= fs.MemorySize()
        }
 }