diff options
author | Sean Quah <8349537+squahtx@users.noreply.github.com> | 2023-03-09 14:18:39 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-09 14:18:39 +0000 |
commit | caf43c3d7c51edad250e50add5595e44720ba32f (patch) | |
tree | a4a722c3af5f4de3cd786d50f2f69ba5a2c17a69 | |
parent | Add missing type hints to `synapse.storage.database`. (#15230) (diff) | |
download | synapse-caf43c3d7c51edad250e50add5595e44720ba32f.tar.xz |
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>
-rw-r--r-- | changelog.d/15232.bugfix | 1 | ||||
-rw-r--r-- | synapse/handlers/sync.py | 9 |
2 files changed, 8 insertions, 2 deletions
diff --git a/changelog.d/15232.bugfix b/changelog.d/15232.bugfix new file mode 100644 index 0000000000..d75a4f2d99 --- /dev/null +++ b/changelog.d/15232.bugfix @@ -0,0 +1 @@ +Faster joins: Fix a bug introduced in Synapse 1.66 where spurious "Failed to find memberships ..." errors would be logged. diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py index fd6d946c37..9f5b83ed54 100644 --- a/synapse/handlers/sync.py +++ b/synapse/handlers/sync.py @@ -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()) |