summary refs log tree commit diff
path: root/synapse/storage/transactions.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2015-03-23 14:02:34 +0000
committerErik Johnston <erik@matrix.org>2015-03-23 14:02:34 +0000
commitd5272b1d2cf170d2b41d9aa991c3a37e9f7aac34 (patch)
tree8aea48537245fb6ae6925243d175d0b9c4ee9338 /synapse/storage/transactions.py
parentSanitize TransactionStore (diff)
downloadsynapse-d5272b1d2cf170d2b41d9aa991c3a37e9f7aac34.tar.xz
Use 'update or insert' rather than on 'conflict replace'
Diffstat (limited to 'synapse/storage/transactions.py')
-rw-r--r--synapse/storage/transactions.py27
1 files changed, 17 insertions, 10 deletions
diff --git a/synapse/storage/transactions.py b/synapse/storage/transactions.py
index 9dec58c21d..1a5bb41cb2 100644
--- a/synapse/storage/transactions.py
+++ b/synapse/storage/transactions.py
@@ -276,26 +276,33 @@ class TransactionStore(SQLBaseStore):
             retry_interval,
         )
 
-    def _set_destination_retry_timings(cls, txn, destination,
+    def _set_destination_retry_timings(self, txn, destination,
                                        retry_last_ts, retry_interval):
-
         query = (
-            "INSERT INTO destinations"
-            " (destination, retry_last_ts, retry_interval)"
-            " VALUES (?, ?, ?)"
-            " ON DUPLICATE KEY UPDATE"
-            " retry_last_ts=?, retry_interval=?"
+            "UPDATE destinations"
+            " SET retry_last_ts = ?, retry_interval = ?"
+            " WHERE destinations = ?"
         )
 
         txn.execute(
             query,
             (
-                destination,
-                retry_last_ts, retry_interval,
-                retry_last_ts, retry_interval,
+                retry_last_ts, retry_interval, destination,
             )
         )
 
+        if txn.rowcount == 0:
+            # destination wasn't already in table. Insert it.
+            self._simple_insert_txn(
+                txn,
+                table="destinations",
+                values={
+                    "destination": destination,
+                    "retry_last_ts": retry_last_ts,
+                    "retry_interval": retry_interval,
+                }
+            )
+
     def get_destinations_needing_retry(self):
         """Get all destinations which are due a retry for sending a transaction.