X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/21bf21abe900918a7882f7e43c102418e04159be..0fb04af57862494beb38f57b75a1427ee9443e25:/services/keep-web/cache.go diff --git a/services/keep-web/cache.go b/services/keep-web/cache.go index 8336b78f9e..8d1062825e 100644 --- a/services/keep-web/cache.go +++ b/services/keep-web/cache.go @@ -17,13 +17,7 @@ import ( const metricsUpdateInterval = time.Second / 10 type cache struct { - TTL arvados.Duration - UUIDTTL arvados.Duration - MaxCollectionEntries int - MaxCollectionBytes int64 - MaxPermissionEntries int - MaxUUIDEntries int - + config *arvados.WebDAVCacheConfig registry *prometheus.Registry metrics cacheMetrics pdhs *lru.TwoQueueCache @@ -110,15 +104,15 @@ type cachedPermission struct { func (c *cache) setup() { var err error - c.pdhs, err = lru.New2Q(c.MaxUUIDEntries) + c.pdhs, err = lru.New2Q(c.config.MaxUUIDEntries) if err != nil { panic(err) } - c.collections, err = lru.New2Q(c.MaxCollectionEntries) + c.collections, err = lru.New2Q(c.config.MaxCollectionEntries) if err != nil { panic(err) } - c.permissions, err = lru.New2Q(c.MaxPermissionEntries) + c.permissions, err = lru.New2Q(c.config.MaxPermissionEntries) if err != nil { panic(err) } @@ -157,10 +151,14 @@ func (c *cache) Update(client *arvados.Client, coll arvados.Collection, fs arvad } var updated arvados.Collection defer c.pdhs.Remove(coll.UUID) - err := client.RequestAndDecode(&updated, "PATCH", "arvados/v1/collections/"+coll.UUID, client.UpdateBody(coll), nil) + err := client.RequestAndDecode(&updated, "PATCH", "arvados/v1/collections/"+coll.UUID, nil, map[string]interface{}{ + "collection": map[string]string{ + "manifest_text": coll.ManifestText, + }, + }) if err == nil { c.collections.Add(client.AuthToken+"\000"+coll.PortableDataHash, &cachedCollection{ - expire: time.Now().Add(time.Duration(c.TTL)), + expire: time.Now().Add(time.Duration(c.config.TTL)), collection: &updated, }) } @@ -217,11 +215,11 @@ func (c *cache) Get(arv *arvadosclient.ArvadosClient, targetID string, forceRelo } if current.PortableDataHash == pdh { c.permissions.Add(permKey, &cachedPermission{ - expire: time.Now().Add(time.Duration(c.TTL)), + expire: time.Now().Add(time.Duration(c.config.TTL)), }) if pdh != targetID { c.pdhs.Add(targetID, &cachedPDH{ - expire: time.Now().Add(time.Duration(c.UUIDTTL)), + expire: time.Now().Add(time.Duration(c.config.UUIDTTL)), pdh: pdh, }) } @@ -242,19 +240,19 @@ func (c *cache) Get(arv *arvadosclient.ArvadosClient, targetID string, forceRelo if err != nil { return nil, err } - exp := time.Now().Add(time.Duration(c.TTL)) + exp := time.Now().Add(time.Duration(c.config.TTL)) c.permissions.Add(permKey, &cachedPermission{ expire: exp, }) c.pdhs.Add(targetID, &cachedPDH{ - expire: time.Now().Add(time.Duration(c.UUIDTTL)), + expire: time.Now().Add(time.Duration(c.config.UUIDTTL)), pdh: collection.PortableDataHash, }) c.collections.Add(arv.ApiToken+"\000"+collection.PortableDataHash, &cachedCollection{ expire: exp, collection: collection, }) - if int64(len(collection.ManifestText)) > c.MaxCollectionBytes/int64(c.MaxCollectionEntries) { + if int64(len(collection.ManifestText)) > c.config.MaxCollectionBytes/int64(c.config.MaxCollectionEntries) { go c.pruneCollections() } return collection, nil @@ -291,7 +289,7 @@ func (c *cache) pruneCollections() { } } for i, k := range keys { - if size <= c.MaxCollectionBytes { + if size <= c.config.MaxCollectionBytes { break } if expired[i] {