Fix exception reporting due to HTTP request errors. (#7556)

These are business as usual errors, rather than stuff we want to log at
error.
code_spécifique_watcha
Erik Johnston 5 years ago committed by GitHub
parent ac481a738e
commit 547e4dd83e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      changelog.d/7556.misc
  2. 13
      synapse/app/generic_worker.py
  3. 7
      synapse/handlers/federation.py
  4. 7
      synapse/http/matrixfederationclient.py

@ -0,0 +1 @@
Stop logging some expected HTTP request errors as exceptions.

@ -26,7 +26,7 @@ from twisted.web.resource import NoResource
import synapse import synapse
import synapse.events import synapse.events
from synapse.api.errors import SynapseError from synapse.api.errors import HttpResponseException, RequestSendFailed, SynapseError
from synapse.api.urls import ( from synapse.api.urls import (
CLIENT_API_PREFIX, CLIENT_API_PREFIX,
FEDERATION_PREFIX, FEDERATION_PREFIX,
@ -202,9 +202,14 @@ class KeyUploadServlet(RestServlet):
# is there. # is there.
auth_headers = request.requestHeaders.getRawHeaders(b"Authorization", []) auth_headers = request.requestHeaders.getRawHeaders(b"Authorization", [])
headers = {"Authorization": auth_headers} headers = {"Authorization": auth_headers}
result = await self.http_client.post_json_get_json( try:
self.main_uri + request.uri.decode("ascii"), body, headers=headers result = await self.http_client.post_json_get_json(
) self.main_uri + request.uri.decode("ascii"), body, headers=headers
)
except HttpResponseException as e:
raise e.to_synapse() from e
except RequestSendFailed as e:
raise SynapseError(502, "Failed to talk to master") from e
return 200, result return 200, result
else: else:

@ -40,6 +40,7 @@ from synapse.api.errors import (
Codes, Codes,
FederationDeniedError, FederationDeniedError,
FederationError, FederationError,
HttpResponseException,
RequestSendFailed, RequestSendFailed,
SynapseError, SynapseError,
) )
@ -1036,6 +1037,12 @@ class FederationHandler(BaseHandler):
# TODO: We can probably do something more intelligent here. # TODO: We can probably do something more intelligent here.
return True return True
except SynapseError as e: except SynapseError as e:
logger.info("Failed to backfill from %s because %s", dom, e)
continue
except HttpResponseException as e:
if 400 <= e.code < 500:
raise e.to_synapse_error()
logger.info("Failed to backfill from %s because %s", dom, e) logger.info("Failed to backfill from %s because %s", dom, e)
continue continue
except CodeMessageException as e: except CodeMessageException as e:

@ -144,6 +144,11 @@ def _handle_json_response(reactor, timeout_sec, request, response):
d = timeout_deferred(d, timeout=timeout_sec, reactor=reactor) d = timeout_deferred(d, timeout=timeout_sec, reactor=reactor)
body = yield make_deferred_yieldable(d) body = yield make_deferred_yieldable(d)
except TimeoutError as e:
logger.warning(
"{%s} [%s] Timed out reading response", request.txn_id, request.destination,
)
raise RequestSendFailed(e, can_retry=True) from e
except Exception as e: except Exception as e:
logger.warning( logger.warning(
"{%s} [%s] Error reading response: %s", "{%s} [%s] Error reading response: %s",
@ -424,6 +429,8 @@ class MatrixFederationHttpClient(object):
) )
response = yield request_deferred response = yield request_deferred
except TimeoutError as e:
raise RequestSendFailed(e, can_retry=True) from e
except DNSLookupError as e: except DNSLookupError as e:
raise_from(RequestSendFailed(e, can_retry=retry_on_dns_fail), e) raise_from(RequestSendFailed(e, can_retry=retry_on_dns_fail), e)
except Exception as e: except Exception as e:

Loading…
Cancel
Save