summary refs log tree commit diff
path: root/synapse/storage/_base.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2015-04-27 13:22:30 +0100
committerErik Johnston <erik@matrix.org>2015-04-27 13:22:30 +0100
commit2732be83d9e883184f4a783fb7ba15487f30c20d (patch)
tree55ca53c5d3f1c0641d65cbe040ebe32d5ee4992c /synapse/storage/_base.py
parentHandle the fact that postgres databases can be restarted from under us (diff)
downloadsynapse-2732be83d9e883184f4a783fb7ba15487f30c20d.tar.xz
Shuffle operations so that locking upsert happens last in the txn. This ensures the lock is held for the least amount of time possible.
Diffstat (limited to 'synapse/storage/_base.py')
-rw-r--r--synapse/storage/_base.py3
1 files changed, 3 insertions, 0 deletions
diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py
index 874d41447a..6017c2a6e8 100644
--- a/synapse/storage/_base.py
+++ b/synapse/storage/_base.py
@@ -466,6 +466,9 @@ class SQLBaseStore(object):
         )
 
     def _simple_upsert_txn(self, txn, table, keyvalues, values, insertion_values={}):
+        # We need to lock the table :(
+        self.database_engine.lock_table(txn, table)
+
         # Try to update
         sql = "UPDATE %s SET %s WHERE %s" % (
             table,