diff options
author | reivilibre <oliverw@matrix.org> | 2023-01-11 13:21:53 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-11 13:21:53 +0000 |
commit | 5172c8c403d94ea5f184abc8b3c37dbd19a849bc (patch) | |
tree | 2bbd55a9f1f31bd0d3fbdd80a65fcb31d880581e /synapse/handlers/message.py | |
parent | Fix-up type hints for tests.push module. (#14816) (diff) | |
download | synapse-5172c8c403d94ea5f184abc8b3c37dbd19a849bc.tar.xz |
Faster remote room joins (worker mode): do not populate external hosts-in-room cache when sending events as this requires blocking for full state. (#14749)
Signed-off-by: Olivier Wilkinson (reivilibre) <oliverw@matrix.org> Co-authored-by: Sean Quah <seanq@matrix.org>
Diffstat (limited to 'synapse/handlers/message.py')
-rw-r--r-- | synapse/handlers/message.py | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py index 88fc51a4c9..3278a695ed 100644 --- a/synapse/handlers/message.py +++ b/synapse/handlers/message.py @@ -1531,12 +1531,23 @@ class EventCreationHandler: external federation senders don't have to recalculate it themselves. """ - for event, _ in events_and_context: - if not self._external_cache.is_enabled(): - return + if not self._external_cache.is_enabled(): + return - # If external cache is enabled we should always have this. - assert self._external_cache_joined_hosts_updates is not None + # If external cache is enabled we should always have this. + assert self._external_cache_joined_hosts_updates is not None + + for event, event_context in events_and_context: + if event_context.partial_state: + # To populate the cache for a partial-state event, we either have to + # block until full state, which the code below does, or change the + # meaning of cache values to be the list of hosts to which we plan to + # send events and calculate that instead. + # + # The federation senders don't use the external cache when sending + # events in partial-state rooms anyway, so let's not bother populating + # the cache. + continue # We actually store two mappings, event ID -> prev state group, # state group -> joined hosts, which is much more space efficient |