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>
anoa/devenv
reivilibre 2023-01-11 13:21:53 +00:00 committed by GitHub
parent 7f2cabf271
commit 5172c8c403
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 5 deletions

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

@ -0,0 +1 @@
Faster remote room joins (worker mode): do not populate external hosts-in-room cache when sending events as this requires blocking for full state.

View File

@ -1531,12 +1531,23 @@ class EventCreationHandler:
external federation senders don't have to recalculate it themselves. external federation senders don't have to recalculate it themselves.
""" """
for event, _ in events_and_context: if not self._external_cache.is_enabled():
if not self._external_cache.is_enabled(): return
return
# If external cache is enabled we should always have this. # If external cache is enabled we should always have this.
assert self._external_cache_joined_hosts_updates is not None 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, # We actually store two mappings, event ID -> prev state group,
# state group -> joined hosts, which is much more space efficient # state group -> joined hosts, which is much more space efficient