diff options
author | Erik Johnston <erik@matrix.org> | 2019-07-19 11:34:15 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2019-07-19 13:40:24 +0100 |
commit | 2410335507b9fdaffb889755d76a11b0bea66f60 (patch) | |
tree | 4ab7c0ef6ea5e3381772c205844b34def9fe7124 /synapse | |
parent | Speed up the PostgreSQL unit tests (#5717) (diff) | |
download | synapse-2410335507b9fdaffb889755d76a11b0bea66f60.tar.xz |
Use upsert when updating destination retry interval
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/storage/transactions.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/synapse/storage/transactions.py b/synapse/storage/transactions.py index fd18619178..c585cf6cf7 100644 --- a/synapse/storage/transactions.py +++ b/synapse/storage/transactions.py @@ -196,6 +196,26 @@ class TransactionStore(SQLBaseStore): def _set_destination_retry_timings( self, txn, destination, retry_last_ts, retry_interval ): + + if self.database_engine.can_native_upsert: + # Upsert retry time interval if retry_interval is zero (i.e. we're + # resetting it) or greater than the existing retry interval. + + sql = """ + INSERT INTO destinations (destination, retry_last_ts, retry_interval) + VALUES (?, ?, ?) + ON CONFLICT (destination) DO UPDATE SET + retry_last_ts = EXCLUDED.retry_last_ts, + retry_interval = EXCLUDED.retry_interval + WHERE + EXCLUDED.retry_interval = 0 + OR destinations.retry_interval < EXCLUDED.retry_interval + """ + + txn.execute(sql, (destination, retry_last_ts, retry_interval)) + + return + self.database_engine.lock_table(txn, "destinations") # We need to be careful here as the data may have changed from under us |