diff options
author | Richard van der Hoff <github@rvanderhoff.org.uk> | 2017-03-30 13:22:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-30 13:22:24 +0100 |
commit | f9b4bb05e05694f3000df2bc5331b1aaa501575c (patch) | |
tree | 0e1af7919b22fc4debd1662ee626d8b70d43a646 /docs | |
parent | Use txn.fetchall() so we can reuse txn (diff) | |
download | synapse-f9b4bb05e05694f3000df2bc5331b1aaa501575c.tar.xz |
Fix the logcontext handling in the cache wrappers (#2077)
The cache wrappers had a habit of leaking the logcontext into the reactor while the lookup function was running, and then not restoring it correctly when the lookup function had completed. It's all the fault of `preserve_context_over_{fn,deferred}` which are basically a bit broken.
Diffstat (limited to 'docs')
-rw-r--r-- | docs/log_contexts.rst | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/docs/log_contexts.rst b/docs/log_contexts.rst index 8d04a973de..eb1784e700 100644 --- a/docs/log_contexts.rst +++ b/docs/log_contexts.rst @@ -204,9 +204,14 @@ That doesn't follow the rules, but we can fix it by wrapping it with This technique works equally for external functions which return deferreds, or deferreds we have made ourselves. -XXX: think this is what ``preserve_context_over_deferred`` is supposed to do, -though it is broken, in that it only restores the logcontext for the duration -of the callbacks, which doesn't comply with the logcontext rules. +You can also use ``logcontext.make_deferred_yieldable``, which just does the +boilerplate for you, so the above could be written: + +.. code:: python + + def sleep(seconds): + return logcontext.make_deferred_yieldable(get_sleep_deferred(seconds)) + Fire-and-forget --------------- |