summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--synapse/storage/events.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/synapse/storage/events.py b/synapse/storage/events.py
index 11a2ff2d8a..238a2006b8 100644
--- a/synapse/storage/events.py
+++ b/synapse/storage/events.py
@@ -2255,12 +2255,6 @@ class EventsStore(SQLBaseStore):
                 event_id,
             ))
 
-        logger.info("[purge] updating room_depth")
-        txn.execute(
-            "UPDATE room_depth SET min_depth = ? WHERE room_id = ?",
-            (topological_ordering, room_id,)
-        )
-
         # Delete all remote non-state events
         for table in (
             "events",
@@ -2298,6 +2292,18 @@ class EventsStore(SQLBaseStore):
             ]
         )
 
+        # synapse tries to take out an exclusive lock on room_depth whenever it
+        # persists events (because upsert), and once we run this update, we
+        # will block that for the rest of our transaction.
+        #
+        # So, let's stick it at the end so that we don't block event
+        # persistence.
+        logger.info("[purge] updating room_depth")
+        txn.execute(
+            "UPDATE room_depth SET min_depth = ? WHERE room_id = ?",
+            (topological_ordering, room_id,)
+        )
+
         logger.info("[purge] done")
 
     @defer.inlineCallbacks