diff --git a/bigcache.go b/bigcache.go index d6b00f66..d5de8144 100644 --- a/bigcache.go +++ b/bigcache.go @@ -32,14 +32,13 @@ type Response struct { type RemoveReason uint32 const ( - _ RemoveReason = iota // Expired means the key is past its LifeWindow. - Expired + Expired = RemoveReason(1) // NoSpace means the key is the oldest and the cache size was at its maximum when Set was called, or the // entry exceeded the maximum shard size. - NoSpace + NoSpace = RemoveReason(2) // Deleted means Delete was called and this key was removed as a result. - Deleted + Deleted = RemoveReason(3) ) // NewBigCache initialize new instance of BigCache diff --git a/bigcache_test.go b/bigcache_test.go index 05f72a7a..1d97db42 100644 --- a/bigcache_test.go +++ b/bigcache_test.go @@ -934,14 +934,20 @@ func TestBigCache_GetWithInfo(t *testing.T) { // when data, resp, err := cache.GetWithInfo(key) + + // then assertEqual(t, []byte(value), data) noError(t, err) assertEqual(t, Response{}, resp) + + // when clock.set(5) data, resp, err = cache.GetWithInfo(key) + + // then assertEqual(t, err, nil) assertEqual(t, Response{EntryStatus: Expired}, resp) - assertEqual(t, []byte(nil), data) + assertEqual(t, []byte(value), data) } type mockedLogger struct { diff --git a/shard.go b/shard.go index d4cfa6c1..e92c3088 100644 --- a/shard.go +++ b/shard.go @@ -49,15 +49,13 @@ func (s *cacheShard) getWithInfo(key string, hashedKey uint64) (entry []byte, re return nil, resp, ErrEntryNotFound } + entry = readEntry(wrappedEntry) oldestTimeStamp := readTimestampFromEntry(wrappedEntry) + s.lock.RUnlock() + s.hit(hashedKey) if currentTime-oldestTimeStamp >= s.lifeWindow { - s.lock.RUnlock() resp.EntryStatus = Expired - return nil, resp, nil } - entry = readEntry(wrappedEntry) - s.lock.RUnlock() - s.hit(hashedKey) return entry, resp, nil }