16745: Don't store nil in an atomic.Value (panic).
authorTom Clegg <tom@curii.com>
Tue, 2 Mar 2021 14:55:16 +0000 (09:55 -0500)
committerTom Clegg <tom@curii.com>
Tue, 2 Mar 2021 14:55:16 +0000 (09:55 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

services/keep-web/cache.go

index af143c77edc7be31298abeb6cd774c0fbfd970c4..ec48be609015b61063bb89b9718b98e85294a111 100644 (file)
@@ -218,6 +218,7 @@ func (c *cache) GetSession(token string) (arvados.CustomFileSystem, error) {
        now := time.Now()
        ent, _ := c.sessions.Get(token)
        sess, _ := ent.(*cachedSession)
+       expired := false
        if sess == nil {
                c.metrics.sessionMisses.Inc()
                sess = &cachedSession{
@@ -226,13 +227,13 @@ func (c *cache) GetSession(token string) (arvados.CustomFileSystem, error) {
                c.sessions.Add(token, sess)
        } else if sess.expire.Before(now) {
                c.metrics.sessionMisses.Inc()
-               sess.fs.Store(nil)
+               expired = true
        } else {
                c.metrics.sessionHits.Inc()
        }
        go c.pruneSessions()
        fs, _ := sess.fs.Load().(arvados.CustomFileSystem)
-       if fs != nil {
+       if fs != nil && !expired {
                return fs, nil
        }
        ac, err := arvados.NewClientFromConfig(c.cluster)