Skip to content

Commit

Permalink
Fix rejecting invites over federation (matrix-org#12409)
Browse files Browse the repository at this point in the history
Currently causes future incremental syncs to fail.

Broke by matrix-org#12191
  • Loading branch information
erikjohnston authored Apr 7, 2022
1 parent 36af768 commit 7732c49
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 20 deletions.
1 change: 1 addition & 0 deletions changelog.d/12409.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Avoid trying to calculate the state at outlier events.
53 changes: 33 additions & 20 deletions synapse/handlers/sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -1851,6 +1851,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(),
)
)

Expand Down Expand Up @@ -2117,33 +2118,41 @@ 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] = {}

# we include a summary in room responses when we're lazy loading
# members (as the client otherwise doesn't have enough info to form
# the name itself).
if sync_config.filter_collection.lazy_load_members() and (
# we recalculate the summary:
# if there are membership changes in the timeline, or
# if membership has changed during a gappy sync, or
# if this is an initial sync.
any(ev.type == EventTypes.Member for ev in batch.events)
or (
# XXX: this may include false positives in the form of LL
# members which have snuck into state
batch.limited
and any(t == EventTypes.Member for (t, k) in state)
if (
not room_builder.out_of_band
and sync_config.filter_collection.lazy_load_members()
and (
# we recalculate the summary:
# if there are membership changes in the timeline, or
# if membership has changed during a gappy sync, or
# if this is an initial sync.
any(ev.type == EventTypes.Member for ev in batch.events)
or (
# XXX: this may include false positives in the form of LL
# members which have snuck into state
batch.limited
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(
room_id, sync_config, batch, state, now_token
Expand Down Expand Up @@ -2387,6 +2396,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
Expand All @@ -2396,3 +2407,5 @@ class RoomSyncResultBuilder:
full_state: bool
since_token: Optional[StreamToken]
upto_token: StreamToken

out_of_band: bool = False

0 comments on commit 7732c49

Please sign in to comment.