diff options
author | Erik Johnston <erik@matrix.org> | 2021-03-03 16:04:24 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-03 16:04:24 +0000 |
commit | a4fa044c0058337a641a5486b4152d04c6aa3e05 (patch) | |
tree | 1fab746afd12c141412633cf7b675537c3db1956 | |
parent | Purge chain cover tables when purging events. (#9498) (diff) | |
download | synapse-a4fa044c0058337a641a5486b4152d04c6aa3e05.tar.xz |
Fix 'rejected_events_metadata' background update (#9537)
Turns out matrix.org has an event that has duplicate auth events (which really isn't supposed to happen, but here we are). This caused the background update to fail due to `UniqueViolation`.
-rw-r--r-- | changelog.d/9537.bugfix | 1 | ||||
-rw-r--r-- | synapse/storage/databases/main/events_bg_updates.py | 4 |
2 files changed, 4 insertions, 1 deletions
diff --git a/changelog.d/9537.bugfix b/changelog.d/9537.bugfix new file mode 100644 index 0000000000..033ab1c939 --- /dev/null +++ b/changelog.d/9537.bugfix @@ -0,0 +1 @@ +Fix rare edge case that caused a background update to fail if the server had rejected an event that had duplicate auth events. diff --git a/synapse/storage/databases/main/events_bg_updates.py b/synapse/storage/databases/main/events_bg_updates.py index c1626ccf28..cb6b1f8a0c 100644 --- a/synapse/storage/databases/main/events_bg_updates.py +++ b/synapse/storage/databases/main/events_bg_updates.py @@ -696,7 +696,9 @@ class EventsBackgroundUpdatesStore(SQLBaseStore): ) if not has_event_auth: - for auth_id in event.auth_event_ids(): + # Old, dodgy, events may have duplicate auth events, which we + # need to deduplicate as we have a unique constraint. + for auth_id in set(event.auth_event_ids()): auth_events.append( { "room_id": event.room_id, |