forked from MirrorHub/synapse
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.
This commit is contained in:
parent
88cc9cc69e
commit
a9a74101a4
1 changed files with 32 additions and 0 deletions
|
@ -31,6 +31,18 @@ class ResponseCache(object):
|
||||||
self.timeout_sec = timeout_ms / 1000.
|
self.timeout_sec = timeout_ms / 1000.
|
||||||
|
|
||||||
def get(self, key):
|
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)
|
result = self.pending_result_cache.get(key)
|
||||||
if result is not None:
|
if result is not None:
|
||||||
return result.observe()
|
return result.observe()
|
||||||
|
@ -38,6 +50,26 @@ class ResponseCache(object):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def set(self, key, deferred):
|
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)
|
result = ObservableDeferred(deferred, consumeErrors=True)
|
||||||
self.pending_result_cache[key] = result
|
self.pending_result_cache[key] = result
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue