mirror of
https://github.com/gofiber/storage.git
synced 2025-10-02 15:22:19 +08:00
Add fix to verify Keys are expired during Keys() call.
This commit is contained in:
@@ -151,9 +151,18 @@ func (s *Storage) Keys() ([][]byte, error) {
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ts := atomic.LoadUint32(&internal.Timestamp)
|
||||||
keys := make([][]byte, 0, len(s.db))
|
keys := make([][]byte, 0, len(s.db))
|
||||||
for key := range s.db {
|
for key, v := range s.db {
|
||||||
keys = append(keys, []byte(key))
|
// Filter out the expired keys
|
||||||
|
if v.expiry == 0 || v.expiry > ts {
|
||||||
|
keys = append(keys, []byte(key))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Double check if no valid keys were found
|
||||||
|
if len(keys) == 0 {
|
||||||
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return keys, nil
|
return keys, nil
|
||||||
|
@@ -81,6 +81,37 @@ func Test_Storage_Memory_Set_Expiration(t *testing.T) {
|
|||||||
require.Nil(t, keys)
|
require.Nil(t, keys)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_Storage_Memory_Set_Long_Expiration_with_Keys(t *testing.T) {
|
||||||
|
var (
|
||||||
|
testStore = New()
|
||||||
|
key = "john"
|
||||||
|
val = []byte("doe")
|
||||||
|
exp = 5 * time.Second
|
||||||
|
)
|
||||||
|
|
||||||
|
keys, err := testStore.Keys()
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Nil(t, keys)
|
||||||
|
|
||||||
|
err = testStore.Set(key, val, exp)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
time.Sleep(1100 * time.Millisecond)
|
||||||
|
|
||||||
|
keys, err = testStore.Keys()
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Len(t, keys, 1)
|
||||||
|
|
||||||
|
time.Sleep(4000 * time.Millisecond)
|
||||||
|
result, err := testStore.Get(key)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Zero(t, len(result))
|
||||||
|
|
||||||
|
keys, err = testStore.Keys()
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Nil(t, keys)
|
||||||
|
}
|
||||||
|
|
||||||
func Test_Storage_Memory_Get_NotExist(t *testing.T) {
|
func Test_Storage_Memory_Get_NotExist(t *testing.T) {
|
||||||
testStore := New()
|
testStore := New()
|
||||||
result, err := testStore.Get("notexist")
|
result, err := testStore.Get("notexist")
|
||||||
|
Reference in New Issue
Block a user