1 files changed, 17 insertions, 6 deletions
diff --git a/synapse/handlers/pagination.py b/synapse/handlers/pagination.py
index 6f4820c240..35afe6b855 100644
--- a/synapse/handlers/pagination.py
+++ b/synapse/handlers/pagination.py
@@ -515,14 +515,25 @@ class PaginationHandler:
next_token = from_token.copy_and_replace(StreamKeyType.ROOM, next_key)
- if events:
- if event_filter:
- events = await event_filter.filter(events)
+ # if no events are returned from pagination, that implies
+ # we have reached the end of the available events.
+ # In that case we do not return end, to tell the client
+ # there is no need for further queries.
+ if not events:
+ return {
+ "chunk": [],
+ "start": await from_token.to_string(self.store),
+ }
- events = await filter_events_for_client(
- self.storage, user_id, events, is_peeking=(member_event_id is None)
- )
+ if event_filter:
+ events = await event_filter.filter(events)
+
+ events = await filter_events_for_client(
+ self.storage, user_id, events, is_peeking=(member_event_id is None)
+ )
+ # if after the filter applied there are no more events
+ # return immediately - but there might be more in next_token batch
if not events:
return {
"chunk": [],
|