From 9b67715bc3643ff4baeb928aa9634c2c64af93ad Mon Sep 17 00:00:00 2001 From: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> Date: Wed, 30 Mar 2022 12:04:35 +0100 Subject: [PATCH] Disable proactive sends for remote joins (#12330) Do not attempt to send remote joins out over federation. Normally, it will do nothing; occasionally, it will do the wrong thing. --- changelog.d/12330.misc | 1 + synapse/handlers/federation_event.py | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 changelog.d/12330.misc diff --git a/changelog.d/12330.misc b/changelog.d/12330.misc new file mode 100644 index 000000000000..9f333e718a86 --- /dev/null +++ b/changelog.d/12330.misc @@ -0,0 +1 @@ +Avoid trying to calculate the state at outlier events. diff --git a/synapse/handlers/federation_event.py b/synapse/handlers/federation_event.py index 4bd87709f373..567afc910f27 100644 --- a/synapse/handlers/federation_event.py +++ b/synapse/handlers/federation_event.py @@ -469,6 +469,12 @@ async def process_remote_join( if context.rejected: raise SynapseError(400, "Join event was rejected") + # the remote server is responsible for sending our join event to the rest + # of the federation. Indeed, attempting to do so will result in problems + # when we try to look up the state before the join (to get the server list) + # and discover that we do not have it. + event.internal_metadata.proactively_send = False + return await self.persist_events_and_notify(room_id, [(event, context)]) async def backfill(