From 40eb699fdd45523cd29cac5e13d268d3c5f1e3fb Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Mon, 29 Aug 2022 16:59:20 -0400 Subject: [PATCH] 19428: Skip brand new sessions when pruning. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- services/keep-web/cache.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/services/keep-web/cache.go b/services/keep-web/cache.go index d5fdc4997e..e10419f5dc 100644 --- a/services/keep-web/cache.go +++ b/services/keep-web/cache.go @@ -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 } -- 2.30.2