Fix dropped logcontexts during high outbound traffic. (#5277)

Fixes #5271.
This commit is contained in:
Richard van der Hoff 2019-05-29 09:17:33 +01:00 committed by GitHub
parent 7ddbbc45b7
commit f76d407ef3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 7 deletions

1
changelog.d/5277.bugfix Normal file
View File

@ -0,0 +1 @@
Fix dropped logcontexts during high outbound traffic.

View File

@ -344,15 +344,21 @@ class _LimitedHostnameResolver(object):
def resolveHostName(self, resolutionReceiver, hostName, portNumber=0, def resolveHostName(self, resolutionReceiver, hostName, portNumber=0,
addressTypes=None, transportSemantics='TCP'): 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 # We need this function to return `resolutionReceiver` so we do all the
# actual logic involving deferreds in a separate function. # actual logic involving deferreds in a separate function.
self._resolve(
resolutionReceiver, hostName, portNumber, # even though this is happening within the depths of twisted, we need to drop
addressTypes, transportSemantics, # 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 return resolutionReceiver