diff options
author | Mathieu Velten <mathieuv@matrix.org> | 2022-11-24 18:09:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-24 18:09:47 +0100 |
commit | 39cde585bf1e6cf3d32af9302437b37bae7a64b8 (patch) | |
tree | 275e9aee27db271094e26c3bd129839e59ce46ac /synapse/federation/sender | |
parent | Fix crash admin media list api when info is None (#14537) (diff) | |
download | synapse-39cde585bf1e6cf3d32af9302437b37bae7a64b8.tar.xz |
Faster joins: use initial list of servers if we don't have the full state yet (#14408)
Signed-off-by: Mathieu Velten <mathieuv@matrix.org> Co-authored-by: Sean Quah <8349537+squahtx@users.noreply.github.com>
Diffstat (limited to 'synapse/federation/sender')
-rw-r--r-- | synapse/federation/sender/__init__.py | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/synapse/federation/sender/__init__.py b/synapse/federation/sender/__init__.py index 3ad483efe0..fc1d8c88a7 100644 --- a/synapse/federation/sender/__init__.py +++ b/synapse/federation/sender/__init__.py @@ -434,7 +434,23 @@ class FederationSender(AbstractFederationSender): # If there are no prev event IDs then the state is empty # and so no remote servers in the room destinations = set() - else: + + if destinations is None: + # During partial join we use the set of servers that we got + # when beginning the join. It's still possible that we send + # events to servers that left the room in the meantime, but + # we consider that an acceptable risk since it is only our own + # events that we leak and not other server's ones. + partial_state_destinations = ( + await self.store.get_partial_state_servers_at_join( + event.room_id + ) + ) + + if len(partial_state_destinations) > 0: + destinations = partial_state_destinations + + if destinations is None: # We check the external cache for the destinations, which is # stored per state group. |