diff --git a/synapse/storage/events.py b/synapse/storage/events.py index 72a35679db..2427d3b4b2 100644 --- a/synapse/storage/events.py +++ b/synapse/storage/events.py @@ -1468,6 +1468,19 @@ class EventsStore(EventsWorkerStore): retcol="COALESCE(MAX(topological_ordering), 0)", ) new_topo += 1 + + # We need to now update the database with any new edges between chunks + current_prev_ids = set() + + current_forward_ids = self._simple_select_onecol_txn( + txn, + table="chunk_graph", + keyvalues={ + "prev_id": chunk_id, + }, + retcol="chunk_id", + ) + # If there is only one forward chunk and only one sibling event (which # would be the given event), then this satisfies condition two. elif len(forward_chunk_ids) == 1 and len(sibling_events) == 1: @@ -1484,6 +1497,18 @@ class EventsStore(EventsWorkerStore): retcol="COALESCE(MIN(topological_ordering), 0)", ) new_topo -= 1 + + # We need to now update the database with any new edges between chunks + current_prev_ids = self._simple_select_onecol_txn( + txn, + table="chunk_graph", + keyvalues={ + "chunk_id": chunk_id, + }, + retcol="prev_id", + ) + + current_forward_ids = set() else: chunk_id = self._chunk_id_gen.get_next() new_topo = 0 @@ -1492,24 +1517,24 @@ class EventsStore(EventsWorkerStore): # ChunkDBOrderedListStore about that. table.add_node(chunk_id) - # We need to now update the database with any new edges between chunks - current_prev_ids = self._simple_select_onecol_txn( - txn, - table="chunk_graph", - keyvalues={ - "chunk_id": chunk_id, - }, - retcol="prev_id", - ) + # We need to now update the database with any new edges between chunks + current_prev_ids = self._simple_select_onecol_txn( + txn, + table="chunk_graph", + keyvalues={ + "chunk_id": chunk_id, + }, + retcol="prev_id", + ) - current_forward_ids = self._simple_select_onecol_txn( - txn, - table="chunk_graph", - keyvalues={ - "prev_id": chunk_id, - }, - retcol="chunk_id", - ) + current_forward_ids = self._simple_select_onecol_txn( + txn, + table="chunk_graph", + keyvalues={ + "prev_id": chunk_id, + }, + retcol="chunk_id", + ) prev_chunk_ids = set( pid for pid in prev_chunk_ids @@ -1538,6 +1563,7 @@ class EventsStore(EventsWorkerStore): INSERT INTO chunk_backwards_extremities (chunk_id, event_id) SELECT ?, ? WHERE NOT EXISTS ( SELECT event_id FROM events WHERE event_id = ? + AND NOT outlier ) """, [(chunk_id, eid, eid) for eid in prev_event_ids])