diff --git a/synapse/handlers/admin.py b/synapse/handlers/admin.py
index 9a4af3c45f..db80345b94 100644
--- a/synapse/handlers/admin.py
+++ b/synapse/handlers/admin.py
@@ -208,7 +208,12 @@ class AdminHandler:
if not events:
break
- from_key = events[-1].internal_metadata.after
+ last_event = events[-1]
+ assert last_event.internal_metadata.stream_ordering
+ from_key = RoomStreamToken(
+ stream=last_event.internal_metadata.stream_ordering,
+ topological=last_event.depth,
+ )
events = await filter_events_for_client(
self._storage_controllers, user_id, events
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index e78e598d5e..41b00a5cf7 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -1742,13 +1742,19 @@ class RoomEventSource(EventSource[RoomStreamToken, EventBase]):
events = list(room_events)
events.extend(e for evs, _ in room_to_events.values() for e in evs)
- events.sort(key=lambda e: e.internal_metadata.order)
+ # We know stream_ordering must be not None here, as its been
+ # persisted, but mypy doesn't know that
+ events.sort(key=lambda e: cast(int, e.internal_metadata.stream_ordering))
if limit:
events[:] = events[:limit]
if events:
- end_key = events[-1].internal_metadata.after
+ last_event = events[-1]
+ assert last_event.internal_metadata.stream_ordering
+ end_key = RoomStreamToken(
+ stream=last_event.internal_metadata.stream_ordering,
+ )
else:
end_key = to_key
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py
index 1152c0158f..0385c04bc2 100644
--- a/synapse/handlers/sync.py
+++ b/synapse/handlers/sync.py
@@ -601,7 +601,10 @@ class SyncHandler:
if not limited or block_all_timeline:
prev_batch_token = upto_token
if recents:
- room_key = recents[0].internal_metadata.before
+ assert recents[0].internal_metadata.stream_ordering
+ room_key = RoomStreamToken(
+ stream=recents[0].internal_metadata.stream_ordering - 1
+ )
prev_batch_token = upto_token.copy_and_replace(
StreamKeyType.ROOM, room_key
)
@@ -689,7 +692,10 @@ class SyncHandler:
if len(recents) > timeline_limit:
limited = True
recents = recents[-timeline_limit:]
- room_key = recents[0].internal_metadata.before
+ assert recents[0].internal_metadata.stream_ordering
+ room_key = RoomStreamToken(
+ stream=recents[0].internal_metadata.stream_ordering - 1
+ )
prev_batch_token = upto_token.copy_and_replace(StreamKeyType.ROOM, room_key)
|