mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 05:57:25 +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)
|
||||
}
|
||||
|
||||
// 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.
|
||||
//
|
||||
// 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")
|
||||
}
|
||||
|
||||
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) {
|
||||
fakeClock := testingclock.NewFakeClock(time.Now())
|
||||
c := NewLRUExpireCacheWithClock(10, fakeClock)
|
||||
|
Loading…
Reference in New Issue
Block a user