diff options
author | Erik Johnston <erik@matrix.org> | 2019-07-19 16:51:16 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-19 16:51:16 +0100 |
commit | 7704873cb8d14169e6585c03f62d935d0e9d1121 (patch) | |
tree | 05e3f8cd10ca75209cf563a68ef044e0dc267a0e | |
parent | Merge pull request #5713 from matrix-org/erikj/use_cache_for_filtered_state (diff) | |
parent | Newsfile (diff) | |
download | synapse-7704873cb8d14169e6585c03f62d935d0e9d1121.tar.xz |
Merge pull request #5720 from matrix-org/erikj/transactions_upsert
Use upsert when updating destination retry interval
-rw-r--r-- | changelog.d/5720.misc | 1 | ||||
-rw-r--r-- | synapse/storage/transactions.py | 20 |
2 files changed, 21 insertions, 0 deletions
diff --git a/changelog.d/5720.misc b/changelog.d/5720.misc new file mode 100644 index 0000000000..590f64f19d --- /dev/null +++ b/changelog.d/5720.misc @@ -0,0 +1 @@ +Improve database query performance when recording retry intervals for remote hosts. 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 |