summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
authorKegan Dougal <kegan@matrix.org>2017-02-13 13:49:44 +0000
committerKegan Dougal <kegan@matrix.org>2017-02-13 13:49:44 +0000
commitd0497425f81ed21b58046f5f8725fc70ffcc0544 (patch)
tree74c4259b701c357fe66c30ecf9958c47fe2e555f /synapse
parentPop the txn from the map in case it has already been deleted somehow (diff)
downloadsynapse-d0497425f81ed21b58046f5f8725fc70ffcc0544.tar.xz
Ordering is important on errbacks so add the cleanup func before creating an ObservableDeferred
Diffstat (limited to 'synapse')
-rw-r--r--synapse/rest/client/transactions.py14
1 files changed, 7 insertions, 7 deletions
diff --git a/synapse/rest/client/transactions.py b/synapse/rest/client/transactions.py

index 7b742ca7ae..fceca2edeb 100644 --- a/synapse/rest/client/transactions.py +++ b/synapse/rest/client/transactions.py
@@ -87,19 +87,19 @@ class HttpTransactionCache(object): deferred = fn(*args, **kwargs) - # We don't add an errback to the raw deferred, so we ask ObservableDeferred - # to swallow the error. This is fine as the error will still be reported - # to the observers. - observable = ObservableDeferred(deferred, consumeErrors=True) - self.transactions[txn_key] = (observable, self.clock.time_msec()) - # if the request fails with a Twisted failure, remove it # from the transaction map. This is done to ensure that we don't # cache transient errors like rate-limiting errors, etc. def remove_from_map(err): self.transactions.pop(txn_key, None) return err - observable.addErrback(remove_from_map) + deferred.addErrback(remove_from_map) + + # We don't add any other errbacks to the raw deferred, so we ask + # ObservableDeferred to swallow the error. This is fine as the error will + # still be reported to the observers. + observable = ObservableDeferred(deferred, consumeErrors=True) + self.transactions[txn_key] = (observable, self.clock.time_msec()) return observable.observe() def _cleanup(self):