|
@@ -176,25 +176,30 @@ class LruCache(Generic[KT, VT]):
|
|
|
|
|
|
def evict():
|
|
|
ten_minutes_ago = int(reactor.seconds()) - 10 * 60
|
|
|
+ while cache_len() > self.max_size:
|
|
|
+ todelete = list_root.prev_node
|
|
|
+ evicted_len = delete_node(todelete)
|
|
|
+ cache.pop(todelete.key, None)
|
|
|
+ if metrics:
|
|
|
+ metrics.inc_evictions(evicted_len)
|
|
|
+
|
|
|
todelete = list_root.prev_node
|
|
|
- while (
|
|
|
- cache_len() > self.max_size
|
|
|
- or 0 < todelete.allocated_ts < ten_minutes_ago + 60
|
|
|
- ):
|
|
|
+ while 0 < todelete.allocated_ts < ten_minutes_ago + 60:
|
|
|
+ if list_root == todelete:
|
|
|
+ break
|
|
|
+
|
|
|
if 0 < todelete.allocated_ts < ten_minutes_ago:
|
|
|
- todelete = list_root.prev_node
|
|
|
+ todelete = todelete.prev_node
|
|
|
continue
|
|
|
|
|
|
- todelete = list_root.prev_node
|
|
|
- if list_root == todelete:
|
|
|
- break
|
|
|
+ next_todelete = todelete.prev_node
|
|
|
|
|
|
evicted_len = delete_node(todelete)
|
|
|
cache.pop(todelete.key, None)
|
|
|
if metrics:
|
|
|
metrics.inc_evictions(evicted_len)
|
|
|
|
|
|
- todelete = list_root.prev_node
|
|
|
+ todelete = next_todelete
|
|
|
|
|
|
def synchronized(f: FT) -> FT:
|
|
|
@wraps(f)
|