diff --git a/changelog.d/11849.misc b/changelog.d/11849.misc
new file mode 100644
index 0000000000..9561eab192
--- /dev/null
+++ b/changelog.d/11849.misc
@@ -0,0 +1 @@
+Enable cache time-based expiry by default. The `expiry_time` config flag will be superseded by `expire_caches` and `cache_entry_ttl`.
diff --git a/docs/sample_config.yaml b/docs/sample_config.yaml
index 946cd281d2..d2bb3d4208 100644
--- a/docs/sample_config.yaml
+++ b/docs/sample_config.yaml
@@ -751,11 +751,16 @@ caches:
per_cache_factors:
#get_users_who_share_room_with_user: 2.0
- # Controls how long an entry can be in a cache without having been
- # accessed before being evicted. Defaults to None, which means
- # entries are never evicted based on time.
+ # Controls whether cache entries are evicted after a specified time
+ # period. Defaults to true. Uncomment to disable this feature.
#
- #expiry_time: 30m
+ #expire_caches: false
+
+ # If expire_caches is enabled, this flag controls how long an entry can
+ # be in a cache without having been accessed before being evicted.
+ # Defaults to 30m. Uncomment to set a different time to live for cache entries.
+ #
+ #cache_entry_ttl: 30m
# Controls how long the results of a /sync request are cached for after
# a successful response is returned. A higher duration can help clients with
diff --git a/docs/upgrade.md b/docs/upgrade.md
index 6f20000295..25a86c08e6 100644
--- a/docs/upgrade.md
+++ b/docs/upgrade.md
@@ -111,6 +111,13 @@ to:
Please update any relevant reverse proxy or firewall configurations appropriately.
+## Time-based cache expiry is now enabled by default
+
+Formerly, entries in the cache were not evicted regardless of whether they were accessed after storing.
+This behavior has now changed. By default entries in the cache are now evicted after 30m of not being accessed.
+To change the default behavior, go to the `caches` section of the config and change the `expire_caches` and
+`cache_entry_ttl` flags as necessary. Please note that these flags replace the `expiry_time` flag in the config.
+
## Deprecation of `capability` `org.matrix.msc3283.*`
The `capabilities` of MSC3283 from the REST API `/_matrix/client/r0/capabilities`
diff --git a/synapse/config/background_updates.py b/synapse/config/background_updates.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/synapse/config/background_updates.py
diff --git a/synapse/config/cache.py b/synapse/config/cache.py
index d9d85f98e1..387ac6d115 100644
--- a/synapse/config/cache.py
+++ b/synapse/config/cache.py
@@ -12,6 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import logging
import os
import re
import threading
@@ -23,6 +24,8 @@ from synapse.python_dependencies import DependencyException, check_requirements
from ._base import Config, ConfigError
+logger = logging.getLogger(__name__)
+
# The prefix for all cache factor-related environment variables
_CACHE_PREFIX = "SYNAPSE_CACHE_FACTOR"
@@ -148,11 +151,16 @@ class CacheConfig(Config):
per_cache_factors:
#get_users_who_share_room_with_user: 2.0
- # Controls how long an entry can be in a cache without having been
- # accessed before being evicted. Defaults to None, which means
- # entries are never evicted based on time.
+ # Controls whether cache entries are evicted after a specified time
+ # period. Defaults to true. Uncomment to disable this feature.
+ #
+ #expire_caches: false
+
+ # If expire_caches is enabled, this flag controls how long an entry can
+ # be in a cache without having been accessed before being evicted.
+ # Defaults to 30m. Uncomment to set a different time to live for cache entries.
#
- #expiry_time: 30m
+ #cache_entry_ttl: 30m
# Controls how long the results of a /sync request are cached for after
# a successful response is returned. A higher duration can help clients with
@@ -217,12 +225,30 @@ class CacheConfig(Config):
e.message # noqa: B306, DependencyException.message is a property
)
- expiry_time = cache_config.get("expiry_time")
- if expiry_time:
- self.expiry_time_msec: Optional[int] = self.parse_duration(expiry_time)
+ expire_caches = cache_config.get("expire_caches", True)
+ cache_entry_ttl = cache_config.get("cache_entry_ttl", "30m")
+
+ if expire_caches:
+ self.expiry_time_msec: Optional[int] = self.parse_duration(cache_entry_ttl)
else:
self.expiry_time_msec = None
+ # Backwards compatibility support for the now-removed "expiry_time" config flag.
+ expiry_time = cache_config.get("expiry_time")
+
+ if expiry_time and expire_caches:
+ logger.warning(
+ "You have set two incompatible options, expiry_time and expire_caches. Please only use the "
+ "expire_caches and cache_entry_ttl options and delete the expiry_time option as it is "
+ "deprecated."
+ )
+ if expiry_time:
+ logger.warning(
+ "Expiry_time is a deprecated option, please use the expire_caches and cache_entry_ttl options "
+ "instead."
+ )
+ self.expiry_time_msec = self.parse_duration(expiry_time)
+
self.sync_response_cache_duration = self.parse_duration(
cache_config.get("sync_response_cache_duration", 0)
)
|