Skip to content

Commit e36c6f7

Browse files
committed
Revert "Reapply "Revert LruCache CacheManager changes for now""
This reverts commit 3b12305.
1 parent 827b785 commit e36c6f7

7 files changed

Lines changed: 56 additions & 20 deletions

File tree

synapse/rest/client/sync.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,7 @@ def __init__(self, hs: "HomeServer"):
125125
self._json_filter_cache: LruCache[str, bool] = LruCache(
126126
max_size=1000,
127127
cache_name="sync_valid_filter",
128-
# TODO
129-
# cache_manager=hs.get_cache_manager(),
128+
cache_manager=hs.get_cache_manager(),
130129
)
131130

132131
# Ratelimiter for presence updates, keyed by requester.

synapse/storage/databases/main/client_ips.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -436,8 +436,7 @@ def __init__(
436436
self.client_ip_last_seen = LruCache[Tuple[str, str, str], int](
437437
max_size=50000,
438438
cache_name="client_ip_last_seen",
439-
# TODO
440-
# cache_manager=hs.get_cache_manager(),
439+
cache_manager=hs.get_cache_manager(),
441440
)
442441

443442
if hs.config.worker.run_background_tasks and self.user_ips_max_age:

synapse/storage/databases/main/devices.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1780,8 +1780,7 @@ def __init__(
17801780
LruCache(
17811781
max_size=10000,
17821782
cache_name="device_id_exists",
1783-
# TODO
1784-
# cache_manager=hs.get_cache_manager(),
1783+
cache_manager=hs.get_cache_manager(),
17851784
)
17861785
)
17871786

synapse/storage/databases/main/event_federation.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,7 @@ def __init__(
147147
self._event_auth_cache: LruCache[str, List[Tuple[str, int]]] = LruCache(
148148
500000,
149149
cache_name="_event_auth_cache",
150-
# TODO
151-
# cache_manager=hs.get_cache_manager(),
150+
cache_manager=hs.get_cache_manager(),
152151
size_callback=len,
153152
)
154153

synapse/util/caches/deferred_cache.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
from twisted.python.failure import Failure
4545

4646
from synapse.util.async_helpers import ObservableDeferred
47+
from synapse.util.caches import CacheManager
4748
from synapse.util.caches.lrucache import LruCache
4849
from synapse.util.caches.treecache import TreeCache, iterate_tree_cache_entry
4950

@@ -80,6 +81,7 @@ class DeferredCache(Generic[KT, VT]):
8081
def __init__(
8182
self,
8283
name: str,
84+
cache_manager: CacheManager,
8385
max_entries: int = 1000,
8486
tree: bool = False,
8587
iterable: bool = False,
@@ -89,6 +91,7 @@ def __init__(
8991
"""
9092
Args:
9193
name: The name of the cache
94+
cache_manager: The cache manager to handle metrics
9295
max_entries: Maximum amount of entries that the cache will hold
9396
tree: Use a TreeCache instead of a dict as the underlying cache type
9497
iterable: If True, count each item in the cached object as an entry,
@@ -114,6 +117,7 @@ def metrics_cb() -> None:
114117
self.cache: LruCache[KT, VT] = LruCache(
115118
max_size=max_entries,
116119
cache_name=name,
120+
cache_manager=cache_manager,
117121
cache_type=cache_type,
118122
size_callback=(
119123
(lambda d: len(cast(Sized, d)) or 1)

synapse/util/caches/lrucache.py

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
from synapse.config import cache as cache_config
5252
from synapse.metrics.background_process_metrics import wrap_as_background_process
5353
from synapse.util import Clock, caches
54-
from synapse.util.caches import CacheMetric, EvictionReason
54+
from synapse.util.caches import CacheManager, CacheMetric, EvictionReason
5555
from synapse.util.caches.treecache import (
5656
TreeCache,
5757
iterate_tree_cache_entry,
@@ -379,11 +379,44 @@ class LruCache(Generic[KT, VT]):
379379
If cache_type=TreeCache, all keys must be tuples.
380380
"""
381381

382+
# If you're providing in the `cache_name`, then you must provide the `cache_manager`
383+
@overload
384+
def __init__(
385+
self,
386+
max_size: int,
387+
*,
388+
cache_name: str,
389+
cache_manager: CacheManager,
390+
metrics_collection_callback: Optional[Callable[[], None]] = None,
391+
cache_type: Type[Union[dict, TreeCache]] = dict,
392+
size_callback: Optional[Callable[[VT], int]] = None,
393+
apply_cache_factor_from_config: bool = True,
394+
clock: Optional[Clock] = None,
395+
prune_unread_entries: bool = True,
396+
extra_index_cb: Optional[Callable[[KT, VT], KT]] = None,
397+
): ...
398+
399+
# If you're *not* providing in the `cache_name`, then you shouldn't provide the
400+
# `cache_manager` or the `metrics_collection_callback`
401+
@overload
402+
def __init__(
403+
self,
404+
max_size: int,
405+
*,
406+
cache_type: Type[Union[dict, TreeCache]] = dict,
407+
size_callback: Optional[Callable[[VT], int]] = None,
408+
apply_cache_factor_from_config: bool = True,
409+
clock: Optional[Clock] = None,
410+
prune_unread_entries: bool = True,
411+
extra_index_cb: Optional[Callable[[KT, VT], KT]] = None,
412+
): ...
413+
382414
def __init__(
383415
self,
384416
max_size: int,
385417
*,
386418
cache_name: Optional[str] = None,
419+
cache_manager: Optional[CacheManager] = None,
387420
metrics_collection_callback: Optional[Callable[[], None]] = None,
388421
cache_type: Type[Union[dict, TreeCache]] = dict,
389422
size_callback: Optional[Callable[[VT], int]] = None,
@@ -399,6 +432,9 @@ def __init__(
399432
cache_name: The name of this cache, for the prometheus metrics. If unset,
400433
no metrics will be reported on this cache.
401434
435+
cache_manager: The cache manager to handle metrics. If unset, no metrics will be
436+
reported on this cache.
437+
402438
Ignored if `cache_name` is `None`.
403439
404440
metrics_collection_callback:
@@ -463,17 +499,15 @@ def __init__(
463499
# do yet when we get resized.
464500
self._on_resize: Optional[Callable[[], None]] = None
465501

466-
# TODO
467-
# if cache_name is not None:
468-
# metrics: Optional[CacheMetric] = cache_manager.register_cache(
469-
# "lru_cache",
470-
# cache_name,
471-
# self,
472-
# collect_callback=metrics_collection_callback,
473-
# )
474-
# else:
475-
# metrics = None
476-
metrics: Optional[CacheMetric] = None
502+
if cache_name is not None:
503+
metrics: Optional[CacheMetric] = cache_manager.register_cache(
504+
"lru_cache",
505+
cache_name,
506+
self,
507+
collect_callback=metrics_collection_callback,
508+
)
509+
else:
510+
metrics = None
477511

478512
# this is exposed for access from outside this class
479513
self.metrics = metrics

tests/util/test_lrucache.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ def test_special_size(self) -> None:
9999
cache: LruCache = LruCache(
100100
10,
101101
cache_name="mycache",
102+
# TODO
103+
# cache_manager=TODO
102104
)
103105
self.assertEqual(cache.max_size, 100)
104106

0 commit comments

Comments
 (0)