Skip to content

Commit

Permalink
Fix exception reporting due to HTTP request errors. (matrix-org#7556)
Browse files Browse the repository at this point in the history
These are business as usual errors, rather than stuff we want to log at
error.
  • Loading branch information
erikjohnston authored and phil-flex committed Jun 16, 2020
1 parent bb4cc79 commit ff9eebd
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 4 deletions.
1 change: 1 addition & 0 deletions changelog.d/7556.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Stop logging some expected HTTP request errors as exceptions.
13 changes: 9 additions & 4 deletions synapse/app/generic_worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

import synapse
import synapse.events
from synapse.api.errors import SynapseError
from synapse.api.errors import HttpResponseException, RequestSendFailed, SynapseError
from synapse.api.urls import (
CLIENT_API_PREFIX,
FEDERATION_PREFIX,
Expand Down Expand Up @@ -202,9 +202,14 @@ async def on_POST(self, request, device_id):
# is there.
auth_headers = request.requestHeaders.getRawHeaders(b"Authorization", [])
headers = {"Authorization": auth_headers}
result = await self.http_client.post_json_get_json(
self.main_uri + request.uri.decode("ascii"), body, headers=headers
)
try:
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
else:
Expand Down
7 changes: 7 additions & 0 deletions synapse/handlers/federation.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
Codes,
FederationDeniedError,
FederationError,
HttpResponseException,
RequestSendFailed,
SynapseError,
)
Expand Down Expand Up @@ -1036,6 +1037,12 @@ async def try_backfill(domains):
# TODO: We can probably do something more intelligent here.
return True
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)
continue
except CodeMessageException as e:
Expand Down
7 changes: 7 additions & 0 deletions synapse/http/matrixfederationclient.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,11 @@ def _handle_json_response(reactor, timeout_sec, request, response):
d = timeout_deferred(d, timeout=timeout_sec, reactor=reactor)

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:
logger.warning(
"{%s} [%s] Error reading response: %s",
Expand Down Expand Up @@ -424,6 +429,8 @@ def _send_request(
)

response = yield request_deferred
except TimeoutError as e:
raise RequestSendFailed(e, can_retry=True) from e
except DNSLookupError as e:
raise_from(RequestSendFailed(e, can_retry=retry_on_dns_fail), e)
except Exception as e:
Expand Down

0 comments on commit ff9eebd

Please sign in to comment.