diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py index 3b5eaf515624..d4ae35e912ca 100644 --- a/synapse/handlers/federation.py +++ b/synapse/handlers/federation.py @@ -748,6 +748,19 @@ async def on_make_join_request( # (and return a 404 otherwise) room_version = await self.store.get_room_version(room_id) + if await self.store.is_partial_state_room(room_id): + # If our server is still only partially joined, we can't give a complete + # response to make_join, so return a 404 as we would if we weren't in the + # room at all. + logger.info( + "Rejecting make_join to %s because it's a partial state room", room_id + ) + raise SynapseError( + 404, + "Unable to handle make_join right now; this server is not fully joined.", + errcode=Codes.NOT_FOUND, + ) + # now check that we are *still* in the room is_in_room = await self._event_auth_handler.check_host_in_room( room_id, self.server_name