diff options
author | Erik Johnston <erik@matrix.org> | 2015-11-03 16:23:35 +0000 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2015-11-03 16:24:03 +0000 |
commit | 7ce264ce5f1b2409081446bd8e1a4adc63675e06 (patch) | |
tree | 006993c3de36b98317b7099db3be4cd2a302b169 /synapse/storage | |
parent | Merge pull request #338 from matrix-org/daniel/fixdb (diff) | |
download | synapse-7ce264ce5f1b2409081446bd8e1a4adc63675e06.tar.xz |
Fix broken cache for getting retry times. This meant we retried remote destinations way more frequently than we should
Diffstat (limited to 'synapse/storage')
-rw-r--r-- | synapse/storage/transactions.py | 48 |
1 files changed, 16 insertions, 32 deletions
diff --git a/synapse/storage/transactions.py b/synapse/storage/transactions.py index 15695e9831..4e0d7c9774 100644 --- a/synapse/storage/transactions.py +++ b/synapse/storage/transactions.py @@ -253,16 +253,6 @@ class TransactionStore(SQLBaseStore): retry_interval (int) - how long until next retry in ms """ - # As this is the new value, we might as well prefill the cache - self.get_destination_retry_timings.prefill( - destination, - { - "destination": destination, - "retry_last_ts": retry_last_ts, - "retry_interval": retry_interval - }, - ) - # XXX: we could chose to not bother persisting this if our cache thinks # this is a NOOP return self.runInteraction( @@ -275,31 +265,25 @@ class TransactionStore(SQLBaseStore): def _set_destination_retry_timings(self, txn, destination, retry_last_ts, retry_interval): - query = ( - "UPDATE destinations" - " SET retry_last_ts = ?, retry_interval = ?" - " WHERE destination = ?" - ) + txn.call_after(self.get_destination_retry_timings.invalidate, (destination,)) - txn.execute( - query, - ( - retry_last_ts, retry_interval, destination, - ) + self._simple_upsert_txn( + txn, + "destinations", + keyvalues={ + "destination": destination, + }, + values={ + "retry_last_ts": retry_last_ts, + "retry_interval": retry_interval, + }, + insertion_values={ + "destination": destination, + "retry_last_ts": retry_last_ts, + "retry_interval": retry_interval, + } ) - 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. |