Skip to content
Snippets Groups Projects
Unverified Commit 0dbbe33a authored by Erik Johnston's avatar Erik Johnston Committed by GitHub
Browse files

Track cache invalidations (#12000)

Currently we only track evictions due to size or time constraints.
parent dc9fe610
No related branches found
No related tags found
No related merge requests found
Track cache invalidations in Prometheus metrics, as already happens for cache eviction based on size or time.
......@@ -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)
......
......@@ -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:
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment