From a82b8d70cc723b0ec30871989c6c1703b86dbf15 Mon Sep 17 00:00:00 2001 From: Nick Barrett Date: Tue, 4 Oct 2022 11:36:24 +0100 Subject: [PATCH] Only check membership events persisted after the get rooms call --- synapse/handlers/sync.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py index 0c2ef7b31177..953e3c28902e 100644 --- a/synapse/handlers/sync.py +++ b/synapse/handlers/sync.py @@ -1324,6 +1324,7 @@ async def generate_sync_result( # Note: we get the users room list *before* we get the current token, this # avoids checking back in history if rooms are joined after the token is fetched. + token_before_rooms = self.event_sources.get_current_token() mutable_joined_room_ids = set(await self.store.get_rooms_for_user(user_id)) # NB: The now_token gets changed by some of the generate_sync_* methods, @@ -1352,6 +1353,13 @@ async def generate_sync_result( # latest change is JOIN. for room_id, event in mem_last_change_by_room_id.items(): + assert event.internal_metadata.stream_ordering + if ( + event.internal_metadata.stream_ordering + < token_before_rooms.room_key.stream + ): + continue + logger.info( "User membership change between getting rooms and current token: %s %s %s", user_id,