From fe7fef28939208949d1b8d5da2237863c5d5d540 Mon Sep 17 00:00:00 2001 From: Andy Balaam Date: Wed, 20 Aug 2025 15:41:17 +0100 Subject: [PATCH] When finding event before a gap, exclude outlier matching the gap --- synapse/storage/databases/main/events.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/synapse/storage/databases/main/events.py b/synapse/storage/databases/main/events.py index 80aad6c95f..401939f15f 100644 --- a/synapse/storage/databases/main/events.py +++ b/synapse/storage/databases/main/events.py @@ -3696,13 +3696,17 @@ class PersistEventsStore: # Given the lowest stitched ordering of all the events that we have just # inserted, find the previous event (by stitched ordering); the gap # will likely come just afterwards. + # + # Note: we include "AND event_id <> backward_extremity_event_id" because + # if this backward extremity is actually an outlier, then that event + # does exist in events, but we don't want to find it. txn.execute( """ SELECT event_id, stitched_ordering FROM events - WHERE room_id = ? AND stitched_ordering < ? + WHERE room_id = ? AND stitched_ordering < ? AND event_id <> ? ORDER BY stitched_ordering DESC LIMIT 1 """, - [room_id, lowest_referring_ordering], + [room_id, lowest_referring_ordering, backward_extremity_event_id], ) row = txn.fetchone() if row is None: