Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Merge pull request #3059 from matrix-org/rav/doc_response_cache
Browse files Browse the repository at this point in the history
Document the behaviour of ResponseCache
  • Loading branch information
richvdh authored Apr 12, 2018
2 parents 971059a + a9a7410 commit 2611243
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions synapse/util/caches/response_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,45 @@ def __init__(self, hs, timeout_ms=0):
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()
else:
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

Expand Down

0 comments on commit 2611243

Please # to comment.