Enable cache time-based expiry by default (#11849)

This commit is contained in:
Shay 2022-02-11 11:05:20 -08:00 committed by GitHub
parent 4d7e74b2e5
commit b2b971f28a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 11 deletions

1
changelog.d/11849.misc Normal file
View File

@ -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`.

View File

@ -751,11 +751,16 @@ caches:
per_cache_factors: per_cache_factors:
#get_users_who_share_room_with_user: 2.0 #get_users_who_share_room_with_user: 2.0
# Controls how long an entry can be in a cache without having been # Controls whether cache entries are evicted after a specified time
# accessed before being evicted. Defaults to None, which means # period. Defaults to true. Uncomment to disable this feature.
# entries are never evicted based on time.
# #
#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 # 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 # a successful response is returned. A higher duration can help clients with

View File

@ -111,6 +111,13 @@ to:
Please update any relevant reverse proxy or firewall configurations appropriately. 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.*` ## Deprecation of `capability` `org.matrix.msc3283.*`
The `capabilities` of MSC3283 from the REST API `/_matrix/client/r0/capabilities` The `capabilities` of MSC3283 from the REST API `/_matrix/client/r0/capabilities`

View File

View File

@ -12,6 +12,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import logging
import os import os
import re import re
import threading import threading
@ -23,6 +24,8 @@ from synapse.python_dependencies import DependencyException, check_requirements
from ._base import Config, ConfigError from ._base import Config, ConfigError
logger = logging.getLogger(__name__)
# The prefix for all cache factor-related environment variables # The prefix for all cache factor-related environment variables
_CACHE_PREFIX = "SYNAPSE_CACHE_FACTOR" _CACHE_PREFIX = "SYNAPSE_CACHE_FACTOR"
@ -148,11 +151,16 @@ class CacheConfig(Config):
per_cache_factors: per_cache_factors:
#get_users_who_share_room_with_user: 2.0 #get_users_who_share_room_with_user: 2.0
# Controls how long an entry can be in a cache without having been # Controls whether cache entries are evicted after a specified time
# accessed before being evicted. Defaults to None, which means # period. Defaults to true. Uncomment to disable this feature.
# entries are never evicted based on time.
# #
#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 # 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 # 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 e.message # noqa: B306, DependencyException.message is a property
) )
expiry_time = cache_config.get("expiry_time") expire_caches = cache_config.get("expire_caches", True)
if expiry_time: cache_entry_ttl = cache_config.get("cache_entry_ttl", "30m")
self.expiry_time_msec: Optional[int] = self.parse_duration(expiry_time)
if expire_caches:
self.expiry_time_msec: Optional[int] = self.parse_duration(cache_entry_ttl)
else: else:
self.expiry_time_msec = None 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( self.sync_response_cache_duration = self.parse_duration(
cache_config.get("sync_response_cache_duration", 0) cache_config.get("sync_response_cache_duration", 0)
) )