Mercurial > gemma
changeset 1333:8c6b5d47a7ff
Renamed octree.OctreeCache to octree.Cache to reduce stuttering.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Sun, 25 Nov 2018 19:25:27 +0100 |
parents | 447db2bce052 |
children | 6a439a92abf7 |
files | pkg/controllers/cross.go pkg/octree/cache.go |
diffstat | 2 files changed, 27 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/controllers/cross.go Sun Nov 25 17:15:44 2018 +0100 +++ b/pkg/controllers/cross.go Sun Nov 25 19:25:27 2018 +0100 @@ -77,7 +77,7 @@ start := time.Now() ctx := req.Context() - tree, err := octree.Cache.Get( + tree, err := octree.FromCache( ctx, conn, csi.Properties.Bottleneck, csi.Properties.Date.Time)
--- a/pkg/octree/cache.go Sun Nov 25 17:15:44 2018 +0100 +++ b/pkg/octree/cache.go Sun Nov 25 19:25:27 2018 +0100 @@ -31,7 +31,7 @@ tree *Tree access time.Time } - OctreeCache struct { + Cache struct { sync.Mutex entries map[cacheKey]*cacheEntry } @@ -61,42 +61,50 @@ ` ) -var Cache = OctreeCache{ +var cache = Cache{ entries: map[cacheKey]*cacheEntry{}, } func init() { - go Cache.background() + go cache.background() } -func (oc *OctreeCache) background() { +func (c *Cache) background() { for { time.Sleep(cleanupCacheSleep) - oc.cleanup() + c.cleanup() } } -func (oc *OctreeCache) cleanup() { - oc.Lock() - defer oc.Unlock() +func (c *Cache) cleanup() { + c.Lock() + defer c.Unlock() good := time.Now().Add(-maxCacheAge) - for k, v := range oc.entries { + for k, v := range c.entries { if v.access.Before(good) { - delete(oc.entries, k) + delete(c.entries, k) } } } -func (oc *OctreeCache) Get( +func FromCache( ctx context.Context, conn *sql.Conn, bottleneck string, date time.Time, ) (*Tree, error) { - oc.Lock() - defer oc.Unlock() + return cache.get(ctx, conn, bottleneck, date) +} + +func (c *Cache) get( + ctx context.Context, + conn *sql.Conn, + bottleneck string, date time.Time, +) (*Tree, error) { + c.Lock() + defer c.Unlock() key := cacheKey{date, bottleneck} - entry := oc.entries[key] + entry := c.entries[key] var data []byte var checksum string @@ -140,21 +148,21 @@ return tree, nil } - for len(oc.entries) >= maxCacheEntries { + for len(c.entries) >= maxCacheEntries { // Evict the entry that is accessed the longest time ago. var oldestKey cacheKey oldest := now - for k, v := range oc.entries { + for k, v := range c.entries { if v.access.Before(oldest) { oldest = v.access oldestKey = k } } - delete(oc.entries, oldestKey) + delete(c.entries, oldestKey) } - oc.entries[key] = &cacheEntry{ + c.entries[key] = &cacheEntry{ checksum: checksum, tree: tree, access: now,