diff --git a/synapse/storage/stream.py b/synapse/storage/stream.py
index 09bc522210..e320da1524 100644
--- a/synapse/storage/stream.py
+++ b/synapse/storage/stream.py
@@ -358,7 +358,7 @@ class StreamStore(SQLBaseStore):
sql = (
"SELECT stream_ordering, topological_ordering, event_id"
" FROM events"
- " WHERE room_id = ? AND stream_ordering <= ? AND outlier = 0"
+ " WHERE room_id = ? AND outlier = 0"
" ORDER BY topological_ordering DESC, stream_ordering DESC"
" LIMIT ?"
)
@@ -368,21 +368,29 @@ class StreamStore(SQLBaseStore):
"SELECT stream_ordering, topological_ordering, event_id"
" FROM events"
" WHERE room_id = ? AND stream_ordering > ?"
- " AND stream_ordering <= ? AND outlier = 0"
+ " AND outlier = 0"
" ORDER BY topological_ordering DESC, stream_ordering DESC"
" LIMIT ?"
)
def get_recent_events_for_room_txn(txn):
if from_token is None:
- txn.execute(sql, (room_id, end_token.stream, limit,))
+ txn.execute(sql, (room_id, limit*2,))
else:
txn.execute(sql, (
- room_id, from_token.stream, end_token.stream, limit
+ room_id, from_token.stream, limit*2
))
rows = self.cursor_to_dict(txn)
+ rows[:] = [
+ r
+ for r in rows
+ if r["stream_ordering"] <= end_token.stream
+ ]
+
+ rows[:] = rows[:int(limit)]
+
rows.reverse() # As we selected with reverse ordering
if rows:
|