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
s := ent.(*cachedSession)
if s.expire.Before(now) {
c.sessions.Remove(token)
+ keys[idx] = ""
continue
}
if fs, ok := s.fs.Load().(arvados.CustomFileSystem); ok {
// 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
}
c.metrics.apiCalls.Inc()
var current arvados.User
- err = sess.client.RequestAndDecode(¤t, "GET", "/arvados/v1/users/current", nil, nil)
+ err = sess.client.RequestAndDecode(¤t, "GET", "arvados/v1/users/current", nil, nil)
if err != nil {
return nil, err
}