From d5272b1d2cf170d2b41d9aa991c3a37e9f7aac34 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Mon, 23 Mar 2015 14:02:34 +0000 Subject: [PATCH] Use 'update or insert' rather than on 'conflict replace' --- synapse/storage/transactions.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/synapse/storage/transactions.py b/synapse/storage/transactions.py index 9dec58c21..1a5bb41cb 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.