diff options
author | Erik Johnston <erik@matrix.org> | 2022-07-21 17:13:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-21 17:13:44 +0100 |
commit | 0b87eb8e0c8e2dd4a426005dce53dfdd57282475 (patch) | |
tree | ba709b1f931e2f257d0f13d7a1c6d493102cbba7 /synapse/storage/databases | |
parent | Don't hold onto full state in state cache (#13324) (diff) | |
download | synapse-0b87eb8e0c8e2dd4a426005dce53dfdd57282475.tar.xz |
Make DictionaryCache have better expiry properties (#13292)
Diffstat (limited to 'synapse/storage/databases')
-rw-r--r-- | synapse/storage/databases/state/store.py | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/synapse/storage/databases/state/store.py b/synapse/storage/databases/state/store.py index afbc85ad0c..bb64543c1f 100644 --- a/synapse/storage/databases/state/store.py +++ b/synapse/storage/databases/state/store.py @@ -202,7 +202,14 @@ class StateGroupDataStore(StateBackgroundUpdateStore, SQLBaseStore): requests state from the cache, if False we need to query the DB for the missing state. """ - cache_entry = cache.get(group) + # If we are asked explicitly for a subset of keys, we only ask for those + # from the cache. This ensures that the `DictionaryCache` can make + # better decisions about what to cache and what to expire. + dict_keys = None + if not state_filter.has_wildcards(): + dict_keys = state_filter.concrete_types() + + cache_entry = cache.get(group, dict_keys=dict_keys) state_dict_ids = cache_entry.value if cache_entry.full or state_filter.is_full(): |