Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Faster joins: Fix spurious errors on incremental sync
Browse files Browse the repository at this point in the history
When pushing events in partial state rooms down incremental /sync, we
try to find the `m.room.member` state event for their senders by digging
through their auth events, so that we can present the membership to the
client. Events usually have a membership event in their auth events,
with the exception of the `m.room.create` event and a user's first join
into the room.

When implementing #13477, we took the case of a user's first join into
account, but forgot to handle the `m.room.create` case. This change
fixes that.

Signed-off-by: Sean Quah <[email protected]>
  • Loading branch information
Sean Quah committed Mar 8, 2023
1 parent 88efc75 commit 8f5f5d4
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
1 change: 1 addition & 0 deletions changelog.d/15232.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Faster joins: Fix a bug introduced in Synapse 1.66 where spurious "Failed to find memberships ..." errors would be logged.
9 changes: 7 additions & 2 deletions synapse/handlers/sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -1226,16 +1226,21 @@ async def _find_missing_partial_state_memberships(
continue

event_with_membership_auth = events_with_membership_auth[member]
is_create = (
event_with_membership_auth.is_state()
and event_with_membership_auth.type == EventTypes.Create
)
is_join = (
event_with_membership_auth.is_state()
and event_with_membership_auth.type == EventTypes.Member
and event_with_membership_auth.state_key == member
and event_with_membership_auth.content.get("membership")
== Membership.JOIN
)
if not is_join:
if not is_create and not is_join:
# The event must include the desired membership as an auth event, unless
# it's the first join event for a given user.
# it's the `m.room.create` event for a room or the first join event for
# a given user.
missing_members.add(member)
auth_event_ids.update(event_with_membership_auth.auth_event_ids())

Expand Down

0 comments on commit 8f5f5d4

Please sign in to comment.