Track cache invalidations (#12000)

Currently we only track evictions due to size or time constraints.
This commit is contained in:
Erik Johnston 2022-02-15 14:31:04 +00:00 committed by GitHub
parent dc9fe61050
commit 0dbbe33a65
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 10 additions and 1 deletions

View file

@ -0,0 +1 @@
Track cache invalidations in Prometheus metrics, as already happens for cache eviction based on size or time.

View file

@ -56,6 +56,7 @@ response_cache_total = Gauge("synapse_util_caches_response_cache:total", "", ["n
class EvictionReason(Enum):
size = auto()
time = auto()
invalidation = auto()
@attr.s(slots=True, auto_attribs=True)

View file

@ -133,6 +133,11 @@ class ExpiringCache(Generic[KT, VT]):
raise KeyError(key)
return default
if self.iterable:
self.metrics.inc_evictions(EvictionReason.invalidation, len(value.value))
else:
self.metrics.inc_evictions(EvictionReason.invalidation)
return value.value
def __contains__(self, key: KT) -> bool:

View file

@ -560,8 +560,10 @@ class LruCache(Generic[KT, VT]):
def cache_pop(key: KT, default: Optional[T] = None) -> Union[None, T, VT]:
node = cache.get(key, None)
if node:
delete_node(node)
evicted_len = delete_node(node)
cache.pop(node.key, None)
if metrics:
metrics.inc_evictions(EvictionReason.invalidation, evicted_len)
return node.value
else:
return default