|
|
|
@ -87,9 +87,17 @@ 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. |
|
|
|
|
# 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 |
|
|
|
|
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() |
|
|
|
|