mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	LRUExpireCache: Allow removing multiple keys under lock
This commit is contained in:
		@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user