Document the behaviour of ResponseCache
it looks like everything that uses ResponseCache expects to have to `make_deferred_yieldable` its results. It's debatable whether that is the best approach, but let's document it for now to avoid further confusion.pull/3059/head
parent
88cc9cc69e
commit
a9a74101a4
|
@ -31,6 +31,18 @@ class ResponseCache(object):
|
|||
self.timeout_sec = timeout_ms / 1000.
|
||||
|
||||
def get(self, key):
|
||||
"""Look up the given key.
|
||||
|
||||
Returns a deferred which doesn't follow the synapse logcontext rules,
|
||||
so you'll probably want to make_deferred_yieldable it.
|
||||
|
||||
Args:
|
||||
key (str):
|
||||
|
||||
Returns:
|
||||
twisted.internet.defer.Deferred|None: None if there is no entry
|
||||
for this key; otherwise a deferred result.
|
||||
"""
|
||||
result = self.pending_result_cache.get(key)
|
||||
if result is not None:
|
||||
return result.observe()
|
||||
|
@ -38,6 +50,26 @@ class ResponseCache(object):
|
|||
return None
|
||||
|
||||
def set(self, key, deferred):
|
||||
"""Set the entry for the given key to the given deferred.
|
||||
|
||||
*deferred* should run its callbacks in the sentinel logcontext (ie,
|
||||
you should wrap normal synapse deferreds with
|
||||
logcontext.run_in_background).
|
||||
|
||||
Returns a new Deferred which also doesn't follow the synapse logcontext
|
||||
rules, so you will want to make_deferred_yieldable it
|
||||
|
||||
(TODO: before using this more widely, it might make sense to refactor
|
||||
it and get() so that they do the necessary wrapping rather than having
|
||||
to do it everywhere ResponseCache is used.)
|
||||
|
||||
Args:
|
||||
key (str):
|
||||
deferred (twisted.internet.defer.Deferred):
|
||||
|
||||
Returns:
|
||||
twisted.internet.defer.Deferred
|
||||
"""
|
||||
result = ObservableDeferred(deferred, consumeErrors=True)
|
||||
self.pending_result_cache[key] = result
|
||||
|
||||
|
|
Loading…
Reference in New Issue