diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py index 303c38c7460e..6a5bd44e6e6b 100644 --- a/synapse/handlers/sync.py +++ b/synapse/handlers/sync.py @@ -1850,6 +1850,7 @@ async def _get_rooms_changed( full_state=False, since_token=since_token, upto_token=leave_token, + out_of_band=leave_event.internal_metadata.is_out_of_band_membership(), ) ) @@ -2116,14 +2117,18 @@ async def _generate_room_entry( ): return - state = await self.compute_state_delta( - room_id, - batch, - sync_config, - since_token, - now_token, - full_state=full_state, - ) + if not room_builder.out_of_band: + state = await self.compute_state_delta( + room_id, + batch, + sync_config, + since_token, + now_token, + full_state=full_state, + ) + else: + # An out of band room won't have any state changes. + state = {} summary: Optional[JsonDict] = {} @@ -2386,6 +2391,8 @@ class RoomSyncResultBuilder: full_state: Whether the full state should be sent in result since_token: Earliest point to return events from, or None upto_token: Latest point to return events from. + out_of_band: whether the events in the room are "out of band" events + and the server isn't in the room. """ room_id: str @@ -2395,3 +2402,5 @@ class RoomSyncResultBuilder: full_state: bool since_token: Optional[StreamToken] upto_token: StreamToken + + out_of_band: bool = False