diff options
author | Nick Mills-Barrett <nick@fizzadar.com> | 2022-04-13 11:38:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-13 11:38:35 +0100 |
commit | e3a49f4784d5c915355ac9306e60b09433db60b5 (patch) | |
tree | 37a4bfca3764b4792738abc1d22d4ff4419af317 /synapse/handlers/sync.py | |
parent | Use poetry lockfile in twisted trunk CI job (#12425) (diff) | |
download | synapse-e3a49f4784d5c915355ac9306e60b09433db60b5.tar.xz |
Fix missing sync events during historical batch imports (#12319)
Discovered after much in-depth investigation in #12281. Closes: #12281 Closes: #3305 Signed off by: Nick Mills-Barrett nick@beeper.com
Diffstat (limited to 'synapse/handlers/sync.py')
-rw-r--r-- | synapse/handlers/sync.py | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py index 6c8b17c420..5125126a80 100644 --- a/synapse/handlers/sync.py +++ b/synapse/handlers/sync.py @@ -661,16 +661,15 @@ class SyncHandler: stream_position: point at which to get state state_filter: The state filter used to fetch state from the database. """ - # FIXME this claims to get the state at a stream position, but - # get_recent_events_for_room operates by topo ordering. This therefore - # does not reliably give you the state at the given stream position. - # (https://github.com/matrix-org/synapse/issues/3305) - last_events, _ = await self.store.get_recent_events_for_room( - room_id, end_token=stream_position.room_key, limit=1 + # FIXME: This gets the state at the latest event before the stream ordering, + # which might not be the same as the "current state" of the room at the time + # of the stream token if there were multiple forward extremities at the time. + last_event = await self.store.get_last_event_in_room_before_stream_ordering( + room_id, + end_token=stream_position.room_key, ) - if last_events: - last_event = last_events[-1] + if last_event: state = await self.get_state_after_event( last_event, state_filter=state_filter or StateFilter.all() ) |