diff options
author | Erik Johnston <erik@matrix.org> | 2016-03-11 13:17:49 +0000 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2016-03-11 13:17:49 +0000 |
commit | 58443a022d5d29fddea7e1d9c7a96b7abca9ff89 (patch) | |
tree | 6619b9f273114a66c526c578f18b4e6943adee15 /synapse/storage | |
parent | Merge pull request #638 from matrix-org/daniel/appserviceid (diff) | |
parent | Add comment (diff) | |
download | synapse-58443a022d5d29fddea7e1d9c7a96b7abca9ff89.tar.xz |
Merge pull request #635 from matrix-org/erikj/sync_order
Use topological orders for initial sync timeline
Diffstat (limited to 'synapse/storage')
-rw-r--r-- | synapse/storage/stream.py | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/synapse/storage/stream.py b/synapse/storage/stream.py index 8908d5b5da..7f4a827528 100644 --- a/synapse/storage/stream.py +++ b/synapse/storage/stream.py @@ -184,6 +184,9 @@ class StreamStore(SQLBaseStore): @defer.inlineCallbacks def get_room_events_stream_for_room(self, room_id, from_key, to_key, limit=0, order='DESC'): + # Note: If from_key is None then we return in topological order. This + # is because in that case we're using this as a "get the last few messages + # in a room" function, rather than "get new messages since last sync" if from_key is not None: from_id = RoomStreamToken.parse_stream_token(from_key).stream else: @@ -217,8 +220,8 @@ class StreamStore(SQLBaseStore): " room_id = ?" " AND not outlier" " AND stream_ordering <= ?" - " ORDER BY stream_ordering %s LIMIT ?" - ) % (order,) + " ORDER BY topological_ordering %s, stream_ordering %s LIMIT ?" + ) % (order, order,) txn.execute(sql, (room_id, to_id, limit)) rows = self.cursor_to_dict(txn) @@ -232,7 +235,7 @@ class StreamStore(SQLBaseStore): get_prev_content=True ) - self._set_before_and_after(ret, rows, topo_order=False) + self._set_before_and_after(ret, rows, topo_order=from_id is None) if order.lower() == "desc": ret.reverse() |