summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2020-05-27 12:04:37 +0100
committerGitHub <noreply@github.com>2020-05-27 12:04:37 +0100
commiteefc6b3a0d08cd2a64be7c78c0a4a651cc965be9 (patch)
treeca91c6cf8a1b5639668f68f639c99a1c1ff32b3b
parentEnsure ReplicationStreamer is always started when replication enabled. (#7579) (diff)
downloadsynapse-eefc6b3a0d08cd2a64be7c78c0a4a651cc965be9.tar.xz
Don't apply cache factor to event cache. (#7578)
This is already correctly done when we instansiate the cache, but wasn't
when it got reloaded (which always happens at least once on startup).
-rw-r--r--changelog.d/7578.bugfix1
-rw-r--r--synapse/util/caches/lrucache.py4
-rw-r--r--tests/config/test_cache.py16
3 files changed, 21 insertions, 0 deletions
diff --git a/changelog.d/7578.bugfix b/changelog.d/7578.bugfix
new file mode 100644
index 0000000000..cd29307361
--- /dev/null
+++ b/changelog.d/7578.bugfix
@@ -0,0 +1 @@
+Fix cache config to not apply cache factor to event cache. Regression in v1.14.0rc1.
diff --git a/synapse/util/caches/lrucache.py b/synapse/util/caches/lrucache.py
index 29fabac3cd..df4ea5901d 100644
--- a/synapse/util/caches/lrucache.py
+++ b/synapse/util/caches/lrucache.py
@@ -81,6 +81,7 @@ class LruCache(object):
         """
         cache = cache_type()
         self.cache = cache  # Used for introspection.
+        self.apply_cache_factor_from_config = apply_cache_factor_from_config
 
         # Save the original max size, and apply the default size factor.
         self._original_max_size = max_size
@@ -294,6 +295,9 @@ class LruCache(object):
         Returns:
             bool: Whether the cache changed size or not.
         """
+        if not self.apply_cache_factor_from_config:
+            return False
+
         new_size = int(self._original_max_size * factor)
         if new_size != self.max_size:
             self.max_size = new_size
diff --git a/tests/config/test_cache.py b/tests/config/test_cache.py
index 2920279125..b45e0cc536 100644
--- a/tests/config/test_cache.py
+++ b/tests/config/test_cache.py
@@ -125,3 +125,19 @@ class CacheConfigTests(TestCase):
         cache = LruCache(100)
         add_resizable_cache("foo", cache_resize_callback=cache.set_cache_factor)
         self.assertEqual(cache.max_size, 150)
+
+    def test_apply_cache_factor_from_config(self):
+        """Caches can disable applying cache factor updates, mainly used by
+        event cache size.
+        """
+
+        config = {"caches": {"event_cache_size": "10k"}}
+        t = TestConfig()
+        t.read_config(config, config_dir_path="", data_dir_path="")
+
+        cache = LruCache(
+            max_size=t.caches.event_cache_size, apply_cache_factor_from_config=False,
+        )
+        add_resizable_cache("event_cache", cache_resize_callback=cache.set_cache_factor)
+
+        self.assertEqual(cache.max_size, 10240)