From 9a934c1d1768a0a26ea28a4cccf284e68eb0eb85 Mon Sep 17 00:00:00 2001 From: Sean Quah Date: Fri, 27 Jan 2023 15:21:08 +0000 Subject: [PATCH] fix up for #14882 * the filter for partial state rooms in `_clean_room_for_join_txn` has been replaced with a host membership check in `_do_invite_join`. * `_do_invite_join` can no longer raise a `PartialStateConflictError`. --- synapse/handlers/room_member.py | 23 ++++--------------- synapse/handlers/room_member_worker.py | 22 +++++++----------- .../databases/main/event_federation.py | 7 +----- 3 files changed, 14 insertions(+), 38 deletions(-) diff --git a/synapse/handlers/room_member.py b/synapse/handlers/room_member.py index 869ab252df8b..dd4c383cf03c 100644 --- a/synapse/handlers/room_member.py +++ b/synapse/handlers/room_member.py @@ -26,13 +26,7 @@ GuestAccess, Membership, ) -from synapse.api.errors import ( - AuthError, - Codes, - PartialStateConflictError, - ShadowBanError, - SynapseError, -) +from synapse.api.errors import AuthError, Codes, ShadowBanError, SynapseError from synapse.api.ratelimiting import Ratelimiter from synapse.event_auth import get_named_level, get_power_level_event from synapse.events import EventBase @@ -201,8 +195,6 @@ async def _remote_join( Raises: NoKnownServersError: if remote_room_hosts does not contain a server joined to the room. - PartialStateConflictError: if the room was un-partial stated in the meantime, - a local room join should be done instead. """ raise NotImplementedError() @@ -990,16 +982,11 @@ async def update_membership_locked( if requester.is_guest: content["kind"] = "guest" - try: - remote_join_response = await self._remote_join( - requester, remote_room_hosts, room_id, target, content - ) + remote_join_response = await self._remote_join( + requester, remote_room_hosts, room_id, target, content + ) - return remote_join_response - except PartialStateConflictError: - # Room has been un-partial stated in the meantime, let's continue - # the code flow to trigger a local join through _local_membership_update. - pass + return remote_join_response elif effective_membership_state == Membership.LEAVE: if not is_host_in_room: diff --git a/synapse/handlers/room_member_worker.py b/synapse/handlers/room_member_worker.py index bd40f2c50548..2f3d9c8ca050 100644 --- a/synapse/handlers/room_member_worker.py +++ b/synapse/handlers/room_member_worker.py @@ -16,7 +16,7 @@ from http import HTTPStatus from typing import TYPE_CHECKING, List, Optional, Tuple -from synapse.api.errors import PartialStateConflictError, SynapseError +from synapse.api.errors import SynapseError from synapse.handlers.room_member import NoKnownServersError, RoomMemberHandler from synapse.replication.http.membership import ( ReplicationRemoteJoinRestServlet as ReplRemoteJoin, @@ -55,19 +55,13 @@ async def _remote_join( if len(remote_room_hosts) == 0: raise NoKnownServersError() - try: - ret = await self._remote_join_client( - requester=requester, - remote_room_hosts=remote_room_hosts, - room_id=room_id, - user_id=user.to_string(), - content=content, - ) - except SynapseError as e: - if e.code == HTTPStatus.CONFLICT: - raise PartialStateConflictError() - else: - raise e + ret = await self._remote_join_client( + requester=requester, + remote_room_hosts=remote_room_hosts, + room_id=room_id, + user_id=user.to_string(), + content=content, + ) return ret["event_id"], ret["stream_id"] diff --git a/synapse/storage/databases/main/event_federation.py b/synapse/storage/databases/main/event_federation.py index 185fecbeacb5..bbee02ab18f0 100644 --- a/synapse/storage/databases/main/event_federation.py +++ b/synapse/storage/databases/main/event_federation.py @@ -2016,12 +2016,7 @@ async def clean_room_for_join(self, room_id: str) -> None: ) def _clean_room_for_join_txn(self, txn: LoggingTransaction, room_id: str) -> None: - query = """ - DELETE FROM event_forward_extremities - WHERE room_id = ? AND room_id NOT IN ( - SELECT room_id FROM partial_state_rooms - ) - """ + query = "DELETE FROM event_forward_extremities WHERE room_id = ?" txn.execute(query, (room_id,)) txn.call_after(self.get_latest_event_ids_in_room.invalidate, (room_id,))