diff options
author | Kegan Dougal <kegan@matrix.org> | 2017-02-13 13:49:44 +0000 |
---|---|---|
committer | Kegan Dougal <kegan@matrix.org> | 2017-02-13 13:49:44 +0000 |
commit | d0497425f81ed21b58046f5f8725fc70ffcc0544 (patch) | |
tree | 74c4259b701c357fe66c30ecf9958c47fe2e555f | |
parent | Pop the txn from the map in case it has already been deleted somehow (diff) | |
download | synapse-d0497425f81ed21b58046f5f8725fc70ffcc0544.tar.xz |
Ordering is important on errbacks so add the cleanup func before creating an ObservableDeferred
-rw-r--r-- | synapse/rest/client/transactions.py | 14 |
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): |