summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2015-05-12 14:41:50 +0100
committerErik Johnston <erik@matrix.org>2015-05-12 14:41:50 +0100
commitc1779a79bc6da69621d0034e582008e95db02dad (patch)
tree76540f000534774c090d50bc8ff49cda1fd80117
parentDo state groups persistence /after/ checking if we have already persisted the... (diff)
downloadsynapse-c1779a79bc6da69621d0034e582008e95db02dad.tar.xz
Fix up _handle_prev_events to not try to insert duplicate rows
-rw-r--r--synapse/storage/event_federation.py36
1 files changed, 13 insertions, 23 deletions
diff --git a/synapse/storage/event_federation.py b/synapse/storage/event_federation.py
index 2b5424ced4..6773e44688 100644
--- a/synapse/storage/event_federation.py
+++ b/synapse/storage/event_federation.py
@@ -330,31 +330,21 @@ class EventFederationStore(SQLBaseStore):
 
                 txn.execute(query, (event_id, room_id))
 
-            # Insert all the prev_events as a backwards thing, they'll get
-            # deleted in a second if they're incorrect anyway.
-            self._simple_insert_many_txn(
-                txn,
-                table="event_backward_extremities",
-                values=[
-                    {
-                        "event_id": e_id,
-                        "room_id": room_id,
-                    }
-                    for e_id, _ in prev_events
-                ],
-            )
-
-            # Also delete from the backwards extremities table all ones that
-            # reference events that we have already seen
             query = (
-                "DELETE FROM event_backward_extremities WHERE EXISTS ("
-                "SELECT 1 FROM events "
-                "WHERE "
-                "event_backward_extremities.event_id = events.event_id "
-                "AND not events.outlier "
-                ")"
+                "INSERT INTO event_backward_extremities (event_id, room_id)"
+                " SELECT ?, ? WHERE NOT EXISTS ("
+                " SELECT 1 FROM event_backward_extremities"
+                " WHERE event_id = ? AND room_id = ?"
+                " )"
+                " AND NOT EXISTS ("
+                " SELECT 1 FROM events WHERE event_id = ? AND room_id = ?"
+                " )"
             )
-            txn.execute(query)
+
+            txn.executemany(query, [
+                (e_id, room_id, e_id, room_id, e_id, room_id,)
+                for e_id, _ in prev_events
+            ])
 
             txn.call_after(
                 self.get_latest_event_ids_in_room.invalidate, room_id