From b09bcf16d97799351162aa8ea698c33efc2238d0 Mon Sep 17 00:00:00 2001
From: Erik Johnston <erikj@element.io>
Date: Thu, 5 Sep 2024 14:15:04 +0100
Subject: [PATCH] Fix background update to handle invalid events (#17641)

Follow-up to #17634, https://github.com/element-hq/synapse/pull/17631
and https://github.com/element-hq/synapse/pull/17632 to fix-up
https://github.com/element-hq/synapse/pull/17512
---
 changelog.d/17641.misc                              | 1 +
 synapse/storage/databases/main/events_bg_updates.py | 9 ++++++---
 2 files changed, 7 insertions(+), 3 deletions(-)
 create mode 100644 changelog.d/17641.misc

diff --git a/changelog.d/17641.misc b/changelog.d/17641.misc
new file mode 100644
index 0000000000..756918e2b2
--- /dev/null
+++ b/changelog.d/17641.misc
@@ -0,0 +1 @@
+Pre-populate room data used in experimental [MSC3575](https://github.com/matrix-org/matrix-spec-proposals/pull/3575) Sliding Sync `/sync` endpoint for quick filtering/sorting.
diff --git a/synapse/storage/databases/main/events_bg_updates.py b/synapse/storage/databases/main/events_bg_updates.py
index 307440a614..e20fc4471e 100644
--- a/synapse/storage/databases/main/events_bg_updates.py
+++ b/synapse/storage/databases/main/events_bg_updates.py
@@ -41,7 +41,10 @@ from synapse.storage.databases.main.events import (
     SlidingSyncMembershipSnapshotSharedInsertValues,
     SlidingSyncStateInsertValues,
 )
-from synapse.storage.databases.main.events_worker import DatabaseCorruptionError
+from synapse.storage.databases.main.events_worker import (
+    DatabaseCorruptionError,
+    InvalidEventError,
+)
 from synapse.storage.databases.main.state_deltas import StateDeltasStore
 from synapse.storage.databases.main.stream import StreamWorkerStore
 from synapse.storage.types import Cursor
@@ -2089,7 +2092,7 @@ class EventsBackgroundUpdatesStore(StreamWorkerStore, StateDeltasStore, SQLBaseS
                         fetched_events = await self.get_events(
                             current_state_ids_map.values()
                         )
-                    except DatabaseCorruptionError as e:
+                    except (DatabaseCorruptionError, InvalidEventError) as e:
                         logger.warning(
                             "Failed to fetch state for room '%s' due to corrupted events. Ignoring. Error: %s",
                             room_id,
@@ -2197,7 +2200,7 @@ class EventsBackgroundUpdatesStore(StreamWorkerStore, StateDeltasStore, SQLBaseS
 
                 try:
                     fetched_events = await self.get_events(state_ids_map.values())
-                except DatabaseCorruptionError as e:
+                except (DatabaseCorruptionError, InvalidEventError) as e:
                     logger.warning(
                         "Failed to fetch state for room '%s' due to corrupted events. Ignoring. Error: %s",
                         room_id,
-- 
GitLab