summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2018-06-01 17:19:38 +0100
committerErik Johnston <erik@matrix.org>2018-06-01 17:25:07 +0100
commit01f0c0e8215e3fa8fb41959c1ff1920c9bd40d8b (patch)
tree7b4ad4c0555845d7fe74e86654a4769b377eff3a
parentSpeed things up a bit (diff)
downloadsynapse-01f0c0e8215e3fa8fb41959c1ff1920c9bd40d8b.tar.xz
Postgres fast update
-rw-r--r--synapse/storage/events.py20
1 files changed, 8 insertions, 12 deletions
diff --git a/synapse/storage/events.py b/synapse/storage/events.py

index 2427d3b4b2..cd6aecda67 100644 --- a/synapse/storage/events.py +++ b/synapse/storage/events.py
@@ -1878,7 +1878,13 @@ class EventsStore(EventsWorkerStore): def reindex_chunks_txn(txn): txn.execute(""" - SELECT stream_ordering, room_id, event_id FROM events + SELECT stream_ordering, room_id, event_id, + ( + SELECT COALESCE(array_agg(prev_event_id), ARRAY[]::TEXT[]) + FROM event_edges AS eg + WHERE NOT is_state AND eg.event_id = e.event_id + ) AS prev_events + FROM events AS e WHERE stream_ordering < ? AND outlier = ? AND chunk_id IS NULL ORDER BY stream_ordering DESC LIMIT ? @@ -1887,17 +1893,7 @@ class EventsStore(EventsWorkerStore): rows = txn.fetchall() stream_ordering = up_to_stream_id - for stream_ordering, room_id, event_id in rows: - prev_events = self._simple_select_onecol_txn( - txn, - table="event_edges", - keyvalues={ - "event_id": event_id, - "is_state": False, - }, - retcol="prev_event_id", - ) - + for stream_ordering, room_id, event_id, prev_events in rows: chunk_id, topo = self._compute_chunk_id_txn( txn, room_id, event_id, prev_events, )