summary refs log tree commit diff
path: root/synapse/app/_base.py
diff options
context:
space:
mode:
authorRichard van der Hoff <1389908+richvdh@users.noreply.github.com>2019-05-29 09:17:33 +0100
committerGitHub <noreply@github.com>2019-05-29 09:17:33 +0100
commitf76d407ef3d2f6c18a568eff965e12e794105a7a (patch)
tree93d6072cf1e5559c6c9a55c1103d0570456729b4 /synapse/app/_base.py
parentMerge pull request #5282 from aaronraimist/user-directory (diff)
downloadsynapse-f76d407ef3d2f6c18a568eff965e12e794105a7a.tar.xz
Fix dropped logcontexts during high outbound traffic. (#5277)
Fixes #5271.
Diffstat (limited to 'synapse/app/_base.py')
-rw-r--r--synapse/app/_base.py20
1 files changed, 13 insertions, 7 deletions
diff --git a/synapse/app/_base.py b/synapse/app/_base.py

index 08199a5e8d..8cc990399f 100644 --- a/synapse/app/_base.py +++ b/synapse/app/_base.py
@@ -344,15 +344,21 @@ class _LimitedHostnameResolver(object): def resolveHostName(self, resolutionReceiver, hostName, portNumber=0, addressTypes=None, transportSemantics='TCP'): - # Note this is happening deep within the reactor, so we don't need to - # worry about log contexts. - # We need this function to return `resolutionReceiver` so we do all the # actual logic involving deferreds in a separate function. - self._resolve( - resolutionReceiver, hostName, portNumber, - addressTypes, transportSemantics, - ) + + # even though this is happening within the depths of twisted, we need to drop + # our logcontext before starting _resolve, otherwise: (a) _resolve will drop + # the logcontext if it returns an incomplete deferred; (b) _resolve will + # call the resolutionReceiver *with* a logcontext, which it won't be expecting. + with PreserveLoggingContext(): + self._resolve( + resolutionReceiver, + hostName, + portNumber, + addressTypes, + transportSemantics, + ) return resolutionReceiver