diff --git a/bigcache.go b/bigcache.go index 9589b7bd..d5de8144 100644 --- a/bigcache.go +++ b/bigcache.go @@ -33,13 +33,12 @@ type RemoveReason uint32 const ( // Expired means the key is past its LifeWindow. - // @TODO: Go defaults to 0 so in case we want to return EntryStatus back to the caller Expired cannot be differentiated - Expired RemoveReason = iota + 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 183614db..4bf28a5d 100644 --- a/bigcache_test.go +++ b/bigcache_test.go @@ -995,14 +995,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) - assertEqual(t, err, ErrEntryIsDead) + + // 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/entry_not_found_error.go b/entry_not_found_error.go index 4a5b5f9b..8993384d 100644 --- a/entry_not_found_error.go +++ b/entry_not_found_error.go @@ -5,6 +5,4 @@ import "errors" var ( // ErrEntryNotFound is an error type struct which is returned when entry was not found for provided key ErrEntryNotFound = errors.New("Entry not found") - // ErrEntryIsDead is an error type struct which is returned when entry has past it's life window - ErrEntryIsDead = errors.New("entry is dead") ) diff --git a/shard.go b/shard.go index 52563029..a3c8c097 100644 --- a/shard.go +++ b/shard.go @@ -49,16 +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() - // @TODO: when Expired is non-default value return err as nil as the resp will have proper entry status resp.EntryStatus = Expired - return nil, resp, ErrEntryIsDead } - entry = readEntry(wrappedEntry) - s.lock.RUnlock() - s.hit(hashedKey) return entry, resp, nil }