Handle bad JSON data being returned from the federation API. (#9070)

pull/9092/head
Patrick Cloke 2021-01-12 11:07:01 -05:00 committed by GitHub
parent 0f8945e166
commit 723b19748a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 1 deletions

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

@ -0,0 +1 @@
Fix `JSONDecodeError` spamming the logs when sending transactions to remote servers.

View File

@ -174,6 +174,16 @@ async def _handle_json_response(
d = timeout_deferred(d, timeout=timeout_sec, reactor=reactor) d = timeout_deferred(d, timeout=timeout_sec, reactor=reactor)
body = await make_deferred_yieldable(d) body = await make_deferred_yieldable(d)
except ValueError as e:
# The JSON content was invalid.
logger.warning(
"{%s} [%s] Failed to parse JSON response - %s %s",
request.txn_id,
request.destination,
request.method,
request.uri.decode("ascii"),
)
raise RequestSendFailed(e, can_retry=False) from e
except defer.TimeoutError as e: except defer.TimeoutError as e:
logger.warning( logger.warning(
"{%s} [%s] Timed out reading response - %s %s", "{%s} [%s] Timed out reading response - %s %s",

View File

@ -560,4 +560,4 @@ class FederationClientTests(HomeserverTestCase):
self.pump() self.pump()
f = self.failureResultOf(test_d) f = self.failureResultOf(test_d)
self.assertIsInstance(f.value, ValueError) self.assertIsInstance(f.value, RequestSendFailed)