diff options
author | Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | 2019-05-29 09:17:33 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-29 09:17:33 +0100 |
commit | f76d407ef3d2f6c18a568eff965e12e794105a7a (patch) | |
tree | 93d6072cf1e5559c6c9a55c1103d0570456729b4 | |
parent | Merge pull request #5282 from aaronraimist/user-directory (diff) | |
download | synapse-f76d407ef3d2f6c18a568eff965e12e794105a7a.tar.xz |
Fix dropped logcontexts during high outbound traffic. (#5277)
Fixes #5271.
-rw-r--r-- | changelog.d/5277.bugfix | 1 | ||||
-rw-r--r-- | synapse/app/_base.py | 20 |
2 files changed, 14 insertions, 7 deletions
diff --git a/changelog.d/5277.bugfix b/changelog.d/5277.bugfix new file mode 100644 index 0000000000..371aa2e7fb --- /dev/null +++ b/changelog.d/5277.bugfix @@ -0,0 +1 @@ +Fix dropped logcontexts during high outbound traffic. 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 |