summary refs log tree commit diff
path: root/synapse/storage/_base.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2015-04-07 15:28:37 +0100
committerErik Johnston <erik@matrix.org>2015-04-07 15:28:37 +0100
commit49d6aa1394bba42d52cae4013f7103d682756b28 (patch)
tree6b163ad6d090be23dde9e7951bc455cb2fcfef54 /synapse/storage/_base.py
parentPEP8 (diff)
downloadsynapse-49d6aa1394bba42d52cae4013f7103d682756b28.tar.xz
Retry on deadlock
Diffstat (limited to 'synapse/storage/_base.py')
-rw-r--r--synapse/storage/_base.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py
index 4ac61be895..c15cec0c78 100644
--- a/synapse/storage/_base.py
+++ b/synapse/storage/_base.py
@@ -160,9 +160,19 @@ class LoggingTransaction(object):
         start = time.time() * 1000
 
         try:
-            return self.txn.execute(
-                sql, *args, **kwargs
-            )
+            i = 0
+            N = 5
+            while True:
+                try:
+                    return self.txn.execute(
+                        sql, *args, **kwargs
+                    )
+                except self.database_engine.module.DatabaseError as e:
+                    if self.database_engine.is_deadlock(e) and i < N:
+                        i += 1
+                        logger.warn("[SQL DEADLOCK] {%s}", self.name)
+                        continue
+                    raise
         except Exception as e:
                 logger.debug("[SQL FAIL] {%s} %s", self.name, e)
                 raise