Faster joins: Fix spurious errors on incremental sync (#15232)

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 <seanq@matrix.org>
This commit is contained in:
Sean Quah 2023-03-09 14:18:39 +00:00 committed by GitHub
parent 3d060eae6c
commit caf43c3d7c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 2 deletions

1
changelog.d/15232.bugfix Normal file
View file

@ -0,0 +1 @@
Faster joins: Fix a bug introduced in Synapse 1.66 where spurious "Failed to find memberships ..." errors would be logged.

View file

@ -1226,6 +1226,10 @@ class SyncHandler:
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
@ -1233,9 +1237,10 @@ class SyncHandler:
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())