Skip to content
Snippets Groups Projects
Commit 044d813e authored by Paul "LeoNerd" Evans's avatar Paul "LeoNerd" Evans
Browse files

Use the @cached decorator to implement the destination_retry_timings cache

parent 357fba2c
No related branches found
No related tags found
No related merge requests found
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from ._base import SQLBaseStore, Table from ._base import SQLBaseStore, Table, cached
from collections import namedtuple from collections import namedtuple
...@@ -28,10 +28,6 @@ class TransactionStore(SQLBaseStore): ...@@ -28,10 +28,6 @@ class TransactionStore(SQLBaseStore):
"""A collection of queries for handling PDUs. """A collection of queries for handling PDUs.
""" """
# a write-through cache of DestinationsTable.EntryType indexed by
# destination string
destination_retry_cache = {}
def get_received_txn_response(self, transaction_id, origin): def get_received_txn_response(self, transaction_id, origin):
"""For an incoming transaction from a given origin, check if we have """For an incoming transaction from a given origin, check if we have
already responded to it. If so, return the response code and response already responded to it. If so, return the response code and response
...@@ -211,6 +207,7 @@ class TransactionStore(SQLBaseStore): ...@@ -211,6 +207,7 @@ class TransactionStore(SQLBaseStore):
return ReceivedTransactionsTable.decode_results(txn.fetchall()) return ReceivedTransactionsTable.decode_results(txn.fetchall())
@cached()
def get_destination_retry_timings(self, destination): def get_destination_retry_timings(self, destination):
"""Gets the current retry timings (if any) for a given destination. """Gets the current retry timings (if any) for a given destination.
...@@ -221,9 +218,6 @@ class TransactionStore(SQLBaseStore): ...@@ -221,9 +218,6 @@ class TransactionStore(SQLBaseStore):
None if not retrying None if not retrying
Otherwise a DestinationsTable.EntryType for the retry scheme Otherwise a DestinationsTable.EntryType for the retry scheme
""" """
if destination in self.destination_retry_cache:
return defer.succeed(self.destination_retry_cache[destination])
return self.runInteraction( return self.runInteraction(
"get_destination_retry_timings", "get_destination_retry_timings",
self._get_destination_retry_timings, destination) self._get_destination_retry_timings, destination)
...@@ -250,7 +244,9 @@ class TransactionStore(SQLBaseStore): ...@@ -250,7 +244,9 @@ class TransactionStore(SQLBaseStore):
retry_interval (int) - how long until next retry in ms retry_interval (int) - how long until next retry in ms
""" """
self.destination_retry_cache[destination] = ( # As this is the new value, we might as well prefill the cache
self.get_destination_retry_timings.prefill(
destination,
DestinationsTable.EntryType( DestinationsTable.EntryType(
destination, destination,
retry_last_ts, retry_last_ts,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment