From 1cee43040c0ae5fb589912c56a90607748b17ac4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 15 Jul 2022 16:59:22 +0200 Subject: [PATCH] Call OnDelete in LayeredCache.gc Fixes #71 --- layeredcache.go | 3 +++ layeredcache_test.go | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/layeredcache.go b/layeredcache.go index bd23d20..216e5ca 100644 --- a/layeredcache.go +++ b/layeredcache.go @@ -353,6 +353,9 @@ func (c *LayeredCache) gc() int { c.bucket(item.group).delete(item.group, item.key) c.size -= item.size c.list.Remove(element) + if c.onDelete != nil { + c.onDelete(item) + } item.promotions = -2 dropped += 1 } diff --git a/layeredcache_test.go b/layeredcache_test.go index 081d64b..9186753 100644 --- a/layeredcache_test.go +++ b/layeredcache_test.go @@ -227,7 +227,13 @@ func (_ LayeredCacheTests) TrackerDoesNotCleanupHeldInstance() { } func (_ LayeredCacheTests) RemovesOldestItemWhenFull() { - cache := Layered(Configure().MaxSize(5).ItemsToPrune(1)) + onDeleteFnCalled := false + onDeleteFn := func(item *Item) { + if item.key == "a" { + onDeleteFnCalled = true + } + } + cache := Layered(Configure().MaxSize(5).ItemsToPrune(1).OnDelete(onDeleteFn)) cache.Set("xx", "a", 23, time.Minute) for i := 0; i < 7; i++ { cache.Set(strconv.Itoa(i), "a", i, time.Minute) @@ -242,6 +248,7 @@ func (_ LayeredCacheTests) RemovesOldestItemWhenFull() { Expect(cache.Get("xx", "b").Value()).To.Equal(9001) Expect(cache.GetDropped()).To.Equal(4) Expect(cache.GetDropped()).To.Equal(0) + Expect(onDeleteFnCalled).To.Equal(true) } func (_ LayeredCacheTests) ResizeOnTheFly() {