X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/e2cd53d9007d56e1de4816f6aeab4bd769271162..e67d0f5d43c56f78694ea4a5f93acec5c93cd0fb:/services/keep-web/cache.go diff --git a/services/keep-web/cache.go b/services/keep-web/cache.go index 886e5910b5..ce1168acd2 100644 --- a/services/keep-web/cache.go +++ b/services/keep-web/cache.go @@ -1,3 +1,7 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + package main import ( @@ -12,6 +16,7 @@ import ( type cache struct { TTL arvados.Duration + UUIDTTL arvados.Duration MaxCollectionEntries int MaxCollectionBytes int64 MaxPermissionEntries int @@ -114,7 +119,7 @@ func (c *cache) Get(arv *arvadosclient.ArvadosClient, targetID string, forceRelo var collection *arvados.Collection if pdh != "" { - collection = c.lookupCollection(pdh) + collection = c.lookupCollection(arv.ApiToken + "\000" + pdh) } if collection != nil && permOK { @@ -131,13 +136,12 @@ func (c *cache) Get(arv *arvadosclient.ArvadosClient, targetID string, forceRelo return nil, err } if current.PortableDataHash == pdh { - exp := time.Now().Add(time.Duration(c.TTL)) c.permissions.Add(permKey, &cachedPermission{ - expire: exp, + expire: time.Now().Add(time.Duration(c.TTL)), }) if pdh != targetID { c.pdhs.Add(targetID, &cachedPDH{ - expire: exp, + expire: time.Now().Add(time.Duration(c.UUIDTTL)), pdh: pdh, }) } @@ -146,7 +150,7 @@ func (c *cache) Get(arv *arvadosclient.ArvadosClient, targetID string, forceRelo // PDH changed, but now we know we have // permission -- and maybe we already have the // new PDH in the cache. - if coll := c.lookupCollection(current.PortableDataHash); coll != nil { + if coll := c.lookupCollection(arv.ApiToken + "\000" + current.PortableDataHash); coll != nil { return coll, nil } } @@ -163,10 +167,10 @@ func (c *cache) Get(arv *arvadosclient.ArvadosClient, targetID string, forceRelo expire: exp, }) c.pdhs.Add(targetID, &cachedPDH{ - expire: exp, + expire: time.Now().Add(time.Duration(c.UUIDTTL)), pdh: collection.PortableDataHash, }) - c.collections.Add(collection.PortableDataHash, &cachedCollection{ + c.collections.Add(arv.ApiToken+"\000"+collection.PortableDataHash, &cachedCollection{ expire: exp, collection: collection, }) @@ -233,15 +237,13 @@ func (c *cache) collectionBytes() uint64 { return size } -func (c *cache) lookupCollection(pdh string) *arvados.Collection { - if pdh == "" { - return nil - } else if ent, cached := c.collections.Get(pdh); !cached { +func (c *cache) lookupCollection(key string) *arvados.Collection { + if ent, cached := c.collections.Get(key); !cached { return nil } else { ent := ent.(*cachedCollection) if ent.expire.Before(time.Now()) { - c.collections.Remove(pdh) + c.collections.Remove(key) return nil } else { atomic.AddUint64(&c.stats.CollectionHits, 1)