diff --git a/synapse/util/caches/__init__.py b/synapse/util/caches/__init__.py
index b2504c2fad..600d10b89e 100644
--- a/synapse/util/caches/__init__.py
+++ b/synapse/util/caches/__init__.py
@@ -73,6 +73,19 @@ class CacheMetric:
def inc_evictions(self, size=1):
self.evicted_size += size
+ def inc_memory_usage(self, memory: int):
+ if self.memory_usage is None:
+ self.memory_usage = 0
+
+ self.memory_usage += memory
+
+ def dec_memory_usage(self, memory: int):
+ self.memory_usage -= memory
+
+ def clear_memory_usage(self, memory: int):
+ if self.memory_usage is not None:
+ self.memory_usage = 0
+
def describe(self):
return []
diff --git a/synapse/util/caches/lrucache.py b/synapse/util/caches/lrucache.py
index 5fc26cedd2..5c8ef444fa 100644
--- a/synapse/util/caches/lrucache.py
+++ b/synapse/util/caches/lrucache.py
@@ -172,9 +172,6 @@ class LruCache(Generic[KT, VT]):
self,
collect_callback=metrics_collection_callback,
) # type: Optional[CacheMetric]
-
- if TRACK_MEMORY_USAGE and metrics:
- metrics.memory_usage = 0
else:
metrics = None
@@ -228,7 +225,7 @@ class LruCache(Generic[KT, VT]):
cached_cache_len[0] += size_callback(node.value)
if TRACK_MEMORY_USAGE and metrics:
- metrics.memory_usage += node.memory
+ metrics.inc_memory_usage(node.memory)
def move_node_to_front(node):
prev_node = node.prev_node
@@ -258,7 +255,7 @@ class LruCache(Generic[KT, VT]):
node.callbacks.clear()
if TRACK_MEMORY_USAGE and metrics:
- metrics.memory_usage -= node.memory
+ metrics.dec_memory_usage(node.memory)
return deleted_len
@@ -379,7 +376,7 @@ class LruCache(Generic[KT, VT]):
cached_cache_len[0] = 0
if TRACK_MEMORY_USAGE and metrics:
- metrics.memory_usage = 0
+ metrics.clear_memory_usage()
@synchronized
def cache_contains(key: KT) -> bool:
|