forked from MirrorHub/synapse
Fix exception reporting due to HTTP request errors. (#7556)
These are business as usual errors, rather than stuff we want to log at error.
This commit is contained in:
parent
ac481a738e
commit
547e4dd83e
4 changed files with 24 additions and 4 deletions
1
changelog.d/7556.misc
Normal file
1
changelog.d/7556.misc
Normal file
|
@ -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}
|
||||||
|
try:
|
||||||
result = await self.http_client.post_json_get_json(
|
result = await self.http_client.post_json_get_json(
|
||||||
self.main_uri + request.uri.decode("ascii"), body, headers=headers
|
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…
Reference in a new issue