mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 22:46:12 +00:00
LRUExpireCache: Allow removing multiple keys under lock
This commit is contained in:
parent
599fdb7add
commit
e83baddbb1
@ -136,6 +136,19 @@ func (c *LRUExpireCache) Remove(key interface{}) {
|
|||||||
delete(c.entries, key)
|
delete(c.entries, key)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RemoveAll removes all keys that match predicate.
|
||||||
|
func (c *LRUExpireCache) RemoveAll(predicate func(key any) bool) {
|
||||||
|
c.lock.Lock()
|
||||||
|
defer c.lock.Unlock()
|
||||||
|
|
||||||
|
for key, element := range c.entries {
|
||||||
|
if predicate(key) {
|
||||||
|
c.evictionList.Remove(element)
|
||||||
|
delete(c.entries, key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Keys returns all unexpired keys in the cache.
|
// Keys returns all unexpired keys in the cache.
|
||||||
//
|
//
|
||||||
// Keep in mind that subsequent calls to Get() for any of the returned keys
|
// Keep in mind that subsequent calls to Get() for any of the returned keys
|
||||||
|
@ -67,6 +67,20 @@ func TestSimpleRemove(t *testing.T) {
|
|||||||
expectNotEntry(t, c, "long-lived")
|
expectNotEntry(t, c, "long-lived")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSimpleRemoveAll(t *testing.T) {
|
||||||
|
c := NewLRUExpireCache(10)
|
||||||
|
c.Add("long-lived", "12345", 10*time.Hour)
|
||||||
|
c.Add("other-long-lived", "12345", 10*time.Hour)
|
||||||
|
c.RemoveAll(func(k any) bool {
|
||||||
|
return k.(string) == "long-lived"
|
||||||
|
})
|
||||||
|
|
||||||
|
assertKeys(t, c.Keys(), []any{"other-long-lived"})
|
||||||
|
|
||||||
|
expectNotEntry(t, c, "long-lived")
|
||||||
|
expectEntry(t, c, "other-long-lived", "12345")
|
||||||
|
}
|
||||||
|
|
||||||
func TestExpiredGet(t *testing.T) {
|
func TestExpiredGet(t *testing.T) {
|
||||||
fakeClock := testingclock.NewFakeClock(time.Now())
|
fakeClock := testingclock.NewFakeClock(time.Now())
|
||||||
c := NewLRUExpireCacheWithClock(10, fakeClock)
|
c := NewLRUExpireCacheWithClock(10, fakeClock)
|
||||||
|
Loading…
Reference in New Issue
Block a user