Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 7695ca0

Browse files
authored
Fix a number of logged errors caused by remote servers being down. (#10400)
1 parent 0ae95b3 commit 7695ca0

File tree

5 files changed

+66
-19
lines changed

5 files changed

+66
-19
lines changed

changelog.d/10400.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix a number of logged errors caused by remote servers being down.

synapse/handlers/directory.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
CodeMessageException,
2323
Codes,
2424
NotFoundError,
25+
RequestSendFailed,
2526
ShadowBanError,
2627
StoreError,
2728
SynapseError,
@@ -252,12 +253,14 @@ async def get_association(self, room_alias: RoomAlias) -> JsonDict:
252253
retry_on_dns_fail=False,
253254
ignore_backoff=True,
254255
)
256+
except RequestSendFailed:
257+
raise SynapseError(502, "Failed to fetch alias")
255258
except CodeMessageException as e:
256259
logging.warning("Error retrieving alias")
257260
if e.code == 404:
258261
fed_result = None
259262
else:
260-
raise
263+
raise SynapseError(502, "Failed to fetch alias")
261264

262265
if fed_result and "room_id" in fed_result and "servers" in fed_result:
263266
room_id = fed_result["room_id"]

synapse/handlers/federation.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1414,12 +1414,15 @@ async def send_invite(self, target_host: str, event: EventBase) -> EventBase:
14141414
14151415
Invites must be signed by the invitee's server before distribution.
14161416
"""
1417-
pdu = await self.federation_client.send_invite(
1418-
destination=target_host,
1419-
room_id=event.room_id,
1420-
event_id=event.event_id,
1421-
pdu=event,
1422-
)
1417+
try:
1418+
pdu = await self.federation_client.send_invite(
1419+
destination=target_host,
1420+
room_id=event.room_id,
1421+
event_id=event.event_id,
1422+
pdu=event,
1423+
)
1424+
except RequestSendFailed:
1425+
raise SynapseError(502, f"Can't connect to server {target_host}")
14231426

14241427
return pdu
14251428

@@ -3031,9 +3034,13 @@ async def exchange_third_party_invite(
30313034
await member_handler.send_membership_event(None, event, context)
30323035
else:
30333036
destinations = {x.split(":", 1)[-1] for x in (sender_user_id, room_id)}
3034-
await self.federation_client.forward_third_party_invite(
3035-
destinations, room_id, event_dict
3036-
)
3037+
3038+
try:
3039+
await self.federation_client.forward_third_party_invite(
3040+
destinations, room_id, event_dict
3041+
)
3042+
except (RequestSendFailed, HttpResponseException):
3043+
raise SynapseError(502, "Failed to forward third party invite")
30373044

30383045
async def on_exchange_third_party_invite_request(
30393046
self, event_dict: JsonDict

synapse/handlers/room_list.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@
2020
from unpaddedbase64 import decode_base64, encode_base64
2121

2222
from synapse.api.constants import EventTypes, HistoryVisibility, JoinRules
23-
from synapse.api.errors import Codes, HttpResponseException
23+
from synapse.api.errors import (
24+
Codes,
25+
HttpResponseException,
26+
RequestSendFailed,
27+
SynapseError,
28+
)
2429
from synapse.types import JsonDict, ThirdPartyInstanceID
2530
from synapse.util.caches.descriptors import cached
2631
from synapse.util.caches.response_cache import ResponseCache
@@ -417,14 +422,17 @@ async def _get_remote_list_cached(
417422
repl_layer = self.hs.get_federation_client()
418423
if search_filter:
419424
# We can't cache when asking for search
420-
return await repl_layer.get_public_rooms(
421-
server_name,
422-
limit=limit,
423-
since_token=since_token,
424-
search_filter=search_filter,
425-
include_all_networks=include_all_networks,
426-
third_party_instance_id=third_party_instance_id,
427-
)
425+
try:
426+
return await repl_layer.get_public_rooms(
427+
server_name,
428+
limit=limit,
429+
since_token=since_token,
430+
search_filter=search_filter,
431+
include_all_networks=include_all_networks,
432+
third_party_instance_id=third_party_instance_id,
433+
)
434+
except (RequestSendFailed, HttpResponseException):
435+
raise SynapseError(502, "Failed to fetch room list")
428436

429437
key = (
430438
server_name,

synapse/http/matrixfederationclient.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
from twisted.internet.error import DNSLookupError
4444
from twisted.internet.interfaces import IReactorTime
4545
from twisted.internet.task import _EPSILON, Cooperator
46+
from twisted.web.client import ResponseFailed
4647
from twisted.web.http_headers import Headers
4748
from twisted.web.iweb import IBodyProducer, IResponse
4849

@@ -262,6 +263,15 @@ async def _handle_response(
262263
request.uri.decode("ascii"),
263264
)
264265
raise RequestSendFailed(e, can_retry=True) from e
266+
except ResponseFailed as e:
267+
logger.warning(
268+
"{%s} [%s] Failed to read response - %s %s",
269+
request.txn_id,
270+
request.destination,
271+
request.method,
272+
request.uri.decode("ascii"),
273+
)
274+
raise RequestSendFailed(e, can_retry=True) from e
265275
except Exception as e:
266276
logger.warning(
267277
"{%s} [%s] Error reading response %s %s: %s",
@@ -1137,6 +1147,24 @@ async def get_file(
11371147
msg,
11381148
)
11391149
raise SynapseError(502, msg, Codes.TOO_LARGE)
1150+
except defer.TimeoutError as e:
1151+
logger.warning(
1152+
"{%s} [%s] Timed out reading response - %s %s",
1153+
request.txn_id,
1154+
request.destination,
1155+
request.method,
1156+
request.uri.decode("ascii"),
1157+
)
1158+
raise RequestSendFailed(e, can_retry=True) from e
1159+
except ResponseFailed as e:
1160+
logger.warning(
1161+
"{%s} [%s] Failed to read response - %s %s",
1162+
request.txn_id,
1163+
request.destination,
1164+
request.method,
1165+
request.uri.decode("ascii"),
1166+
)
1167+
raise RequestSendFailed(e, can_retry=True) from e
11401168
except Exception as e:
11411169
logger.warning(
11421170
"{%s} [%s] Error reading response: %s",

0 commit comments

Comments
 (0)