Merge pull request #4546 from matrix-org/rav/silence_critical_error_from_federation

Fix noisy "twisted.internet.task.TaskStopped" errors in logs
This commit is contained in:
Richard van der Hoff 2019-02-01 14:37:22 +00:00 committed by GitHub
commit ef43a03fc5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 2 deletions

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

@ -0,0 +1 @@
Fix noisy "twisted.internet.task.TaskStopped" errors in logs

View File

@ -28,7 +28,7 @@ from canonicaljson import encode_canonical_json
from prometheus_client import Counter from prometheus_client import Counter
from signedjson.sign import sign_json from signedjson.sign import sign_json
from twisted.internet import defer, protocol from twisted.internet import defer, protocol, task
from twisted.internet.error import DNSLookupError from twisted.internet.error import DNSLookupError
from twisted.internet.task import _EPSILON, Cooperator from twisted.internet.task import _EPSILON, Cooperator
from twisted.web._newclient import ResponseDone from twisted.web._newclient import ResponseDone
@ -286,7 +286,7 @@ class MatrixFederationHttpClient(object):
json, json,
) )
data = encode_canonical_json(json) data = encode_canonical_json(json)
producer = FileBodyProducer( producer = QuieterFileBodyProducer(
BytesIO(data), BytesIO(data),
cooperator=self._cooperator, cooperator=self._cooperator,
) )
@ -839,3 +839,16 @@ def encode_query_args(args):
query_bytes = urllib.parse.urlencode(encoded_args, True) query_bytes = urllib.parse.urlencode(encoded_args, True)
return query_bytes.encode('utf8') return query_bytes.encode('utf8')
class QuieterFileBodyProducer(FileBodyProducer):
"""Wrapper for FileBodyProducer that avoids CRITICAL errors when the connection drops.
Workaround for https://github.com/matrix-org/synapse/issues/4003 /
https://twistedmatrix.com/trac/ticket/6528
"""
def stopProducing(self):
try:
FileBodyProducer.stopProducing(self)
except task.TaskStopped:
pass