diff options
author | Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | 2020-10-19 21:13:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-19 21:13:50 +0100 |
commit | 96e7d3c4a0feec6d19b873fd550bcfffd485d910 (patch) | |
tree | 0277d94dd40ebe3b61a2d848f596436dda8a0683 /synapse/util | |
parent | Drop unused `device_max_stream_id` table (#8589) (diff) | |
download | synapse-96e7d3c4a0feec6d19b873fd550bcfffd485d910.tar.xz |
Fix 'LruCache' object has no attribute '_on_resize' (#8591)
We need to make sure we are readu for the `set_cache_factor` callback.
Diffstat (limited to 'synapse/util')
-rw-r--r-- | synapse/util/caches/lrucache.py | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/synapse/util/caches/lrucache.py b/synapse/util/caches/lrucache.py index 3b471d8fd3..60bb6ff642 100644 --- a/synapse/util/caches/lrucache.py +++ b/synapse/util/caches/lrucache.py @@ -124,6 +124,10 @@ class LruCache(Generic[KT, VT]): else: self.max_size = int(max_size) + # register_cache might call our "set_cache_factor" callback; there's nothing to + # do yet when we get resized. + self._on_resize = None # type: Optional[Callable[[],None]] + if cache_name is not None: metrics = register_cache( "lru_cache", @@ -332,7 +336,10 @@ class LruCache(Generic[KT, VT]): return key in cache self.sentinel = object() + + # make sure that we clear out any excess entries after we get resized. self._on_resize = evict + self.get = cache_get self.set = cache_set self.setdefault = cache_set_default @@ -383,6 +390,7 @@ class LruCache(Generic[KT, VT]): new_size = int(self._original_max_size * factor) if new_size != self.max_size: self.max_size = new_size - self._on_resize() + if self._on_resize: + self._on_resize() return True return False |