From: Tom Clegg Date: Sat, 25 Sep 2021 13:44:22 +0000 (-0400) Subject: Scale keep cache to 2*(openfiles+1). X-Git-Url: https://git.arvados.org/lightning.git/commitdiff_plain/1b6d32146cfdbf4c5befbfc5ddd1651d6c63c735 Scale keep cache to 2*(openfiles+1). refs #17966 Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- diff --git a/arvados.go b/arvados.go index c952a9870c..d4dcf7819e 100644 --- a/arvados.go +++ b/arvados.go @@ -520,6 +520,7 @@ var ( type file interface { io.ReadCloser + io.Seeker Readdir(n int) ([]os.FileInfo, error) } @@ -552,9 +553,23 @@ func open(fnm string) (file, error) { keepClient.BlockCache = &keepclient.BlockCache{MaxBlocks: 4} siteFS = arvadosClientFromEnv.SiteFileSystem(keepClient) } else { - keepClient.BlockCache.MaxBlocks++ + keepClient.BlockCache.MaxBlocks += 2 } log.Infof("reading %q from %s using Arvados client", fnm[len(mnt):], uuid) - return siteFS.Open("by_id/" + uuid + fnm[len(mnt):]) + f, err := siteFS.Open("by_id/" + uuid + fnm[len(mnt):]) + if err != nil { + return nil, err + } + return &reduceCacheOnClose{file: f}, nil +} + +type reduceCacheOnClose struct { + file + once sync.Once +} + +func (rc *reduceCacheOnClose) Close() error { + rc.once.Do(func() { keepClient.BlockCache.MaxBlocks -= 2 }) + return rc.file.Close() }