diff options
author | Erik Johnston <erik@matrix.org> | 2016-08-02 17:07:54 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2016-08-02 17:07:54 +0100 |
commit | 59a2c6d60e3c1e03f86e88ad81ac093c8109942d (patch) | |
tree | ef5a7b0722f1d2890df706ac6f42d6dda5986645 /synapse/util | |
parent | Typo (diff) | |
parent | Merge pull request #971 from matrix-org/erikj/fed_state (diff) | |
download | synapse-59a2c6d60e3c1e03f86e88ad81ac093c8109942d.tar.xz |
Merge branch 'develop' of github.com:matrix-org/synapse into release-v0.17.0
Diffstat (limited to 'synapse/util')
-rw-r--r-- | synapse/util/caches/response_cache.py | 13 | ||||
-rw-r--r-- | synapse/util/retryutils.py | 2 |
2 files changed, 12 insertions, 3 deletions
diff --git a/synapse/util/caches/response_cache.py b/synapse/util/caches/response_cache.py index 36686b479e..00af539880 100644 --- a/synapse/util/caches/response_cache.py +++ b/synapse/util/caches/response_cache.py @@ -24,9 +24,12 @@ class ResponseCache(object): used rather than trying to compute a new response. """ - def __init__(self): + def __init__(self, hs, timeout_ms=0): self.pending_result_cache = {} # Requests that haven't finished yet. + self.clock = hs.get_clock() + self.timeout_sec = timeout_ms / 1000. + def get(self, key): result = self.pending_result_cache.get(key) if result is not None: @@ -39,7 +42,13 @@ class ResponseCache(object): self.pending_result_cache[key] = result def remove(r): - self.pending_result_cache.pop(key, None) + if self.timeout_sec: + self.clock.call_later( + self.timeout_sec, + self.pending_result_cache.pop, key, None, + ) + else: + self.pending_result_cache.pop(key, None) return r result.addBoth(remove) diff --git a/synapse/util/retryutils.py b/synapse/util/retryutils.py index 43cf11f3f6..49527f4d21 100644 --- a/synapse/util/retryutils.py +++ b/synapse/util/retryutils.py @@ -128,7 +128,7 @@ class RetryDestinationLimiter(object): ) valid_err_code = False - if exc_type is CodeMessageException: + if exc_type is not None and issubclass(exc_type, CodeMessageException): valid_err_code = 0 <= exc_val.code < 500 if exc_type is None or valid_err_code: |