Fix "'NoneType' has no attribute start|stop" logcontext errors (#7181)

Fixes #7179.
This commit is contained in:
Richard van der Hoff 2020-03-31 15:18:41 +01:00 committed by GitHub
parent fe1580bfd9
commit 60adcbed91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 7 deletions

1
changelog.d/7181.misc Normal file
View File

@ -0,0 +1 @@
Clean up some LoggingContext code.

View File

@ -193,6 +193,12 @@ class SynapseRequest(Request):
self.finish_time = time.time() self.finish_time = time.time()
Request.connectionLost(self, reason) Request.connectionLost(self, reason)
if self.logcontext is None:
logger.info(
"Connection from %s lost before request headers were read", self.client
)
return
# we only get here if the connection to the client drops before we send # we only get here if the connection to the client drops before we send
# the response. # the response.
# #
@ -236,13 +242,6 @@ class SynapseRequest(Request):
def _finished_processing(self): def _finished_processing(self):
"""Log the completion of this request and update the metrics """Log the completion of this request and update the metrics
""" """
if self.logcontext is None:
# this can happen if the connection closed before we read the
# headers (so render was never called). In that case we'll already
# have logged a warning, so just bail out.
return
usage = self.logcontext.get_resource_usage() usage = self.logcontext.get_resource_usage()
if self._processing_finished_time is None: if self._processing_finished_time is None:

View File

@ -539,6 +539,11 @@ def set_current_context(context: LoggingContextOrSentinel) -> LoggingContextOrSe
Returns: Returns:
The context that was previously active The context that was previously active
""" """
# everything blows up if we allow current_context to be set to None, so sanity-check
# that now.
if context is None:
raise TypeError("'context' argument may not be None")
current = current_context() current = current_context()
if current is not context: if current is not context: