Fix rejecting invites over federation (#12409)

Currently causes future incremental syncs to fail.

Broke by #12191
This commit is contained in:
Erik Johnston 2022-04-07 15:54:16 +01:00 committed by GitHub
parent 36af768c13
commit 7732c4902c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 20 deletions

1
changelog.d/12409.misc Normal file
View File

@ -0,0 +1 @@
Avoid trying to calculate the state at outlier events.

View File

@ -1851,6 +1851,7 @@ class SyncHandler:
full_state=False, full_state=False,
since_token=since_token, since_token=since_token,
upto_token=leave_token, upto_token=leave_token,
out_of_band=leave_event.internal_metadata.is_out_of_band_membership(),
) )
) )
@ -2117,6 +2118,7 @@ class SyncHandler:
): ):
return return
if not room_builder.out_of_band:
state = await self.compute_state_delta( state = await self.compute_state_delta(
room_id, room_id,
batch, batch,
@ -2125,13 +2127,19 @@ class SyncHandler:
now_token, now_token,
full_state=full_state, full_state=full_state,
) )
else:
# An out of band room won't have any state changes.
state = {}
summary: Optional[JsonDict] = {} summary: Optional[JsonDict] = {}
# we include a summary in room responses when we're lazy loading # we include a summary in room responses when we're lazy loading
# members (as the client otherwise doesn't have enough info to form # members (as the client otherwise doesn't have enough info to form
# the name itself). # the name itself).
if sync_config.filter_collection.lazy_load_members() and ( if (
not room_builder.out_of_band
and sync_config.filter_collection.lazy_load_members()
and (
# we recalculate the summary: # we recalculate the summary:
# if there are membership changes in the timeline, or # if there are membership changes in the timeline, or
# if membership has changed during a gappy sync, or # if membership has changed during a gappy sync, or
@ -2144,6 +2152,7 @@ class SyncHandler:
and any(t == EventTypes.Member for (t, k) in state) and any(t == EventTypes.Member for (t, k) in state)
) )
or since_token is None or since_token is None
)
): ):
summary = await self.compute_summary( summary = await self.compute_summary(
room_id, sync_config, batch, state, now_token room_id, sync_config, batch, state, now_token
@ -2387,6 +2396,8 @@ class RoomSyncResultBuilder:
full_state: Whether the full state should be sent in result full_state: Whether the full state should be sent in result
since_token: Earliest point to return events from, or None since_token: Earliest point to return events from, or None
upto_token: Latest point to return events from. 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 room_id: str
@ -2396,3 +2407,5 @@ class RoomSyncResultBuilder:
full_state: bool full_state: bool
since_token: Optional[StreamToken] since_token: Optional[StreamToken]
upto_token: StreamToken upto_token: StreamToken
out_of_band: bool = False