Better exception handling

This commit is contained in:
Andrew Morgan 2019-03-18 17:45:54 +00:00
parent ecea5af491
commit 621e7f37f1
2 changed files with 22 additions and 24 deletions

View File

@ -221,20 +221,21 @@ class MatrixFederationHttpClient(object):
""" """
try: try:
response = yield self._send_request(**send_request_args) response = yield self._send_request(**send_request_args)
except HttpResponseException as e:
# Received a 400. Raise unless we're retrying
if not try_trailing_slash_on_400:
raise e
# Check if it's necessary to retry with a trailing slash # Check if it's necessary to retry with a trailing slash
body = yield _handle_json_response( body = yield _handle_json_response(
self.hs.get_reactor(), self.default_timeout, request, response, self.hs.get_reactor(), self.default_timeout, request, response,
) )
except HttpResponseException as e:
if not try_trailing_slash_on_400:
# Received an error >= 300. Raise unless we're retrying
raise e
except:
raise e
# Retry with a trailing slash if we received a 400 with # Retry with a trailing slash if we received a 400 with
# 'M_UNRECOGNIZED' which some endpoints can return when omitting a # 'M_UNRECOGNIZED' which some endpoints can return when omitting a
# trailing slash on Synapse <=v0.99.2. # trailing slash on Synapse <= v0.99.2.
if not (response.code == 400 and body.get("errcode") == "M_UNRECOGNIZED"):
# Enable backoff if initially disabled # Enable backoff if initially disabled
send_request_args["backoff_on_404"] = backoff_on_404 send_request_args["backoff_on_404"] = backoff_on_404

View File

@ -272,7 +272,7 @@ class FederationClientTests(HomeserverTestCase):
""" """
If a connection is made to a client but the client rejects it due to If a connection is made to a client but the client rejects it due to
requiring a trailing slash. We need to retry the request with a requiring a trailing slash. We need to retry the request with a
trailing slash. Workaround for Synapse <=v0.99.2, explained in #3622. trailing slash. Workaround for Synapse <= v0.99.2, explained in #3622.
""" """
d = self.cl.get_json( d = self.cl.get_json(
"testserv:8008", "foo/bar", try_trailing_slash_on_400=True, "testserv:8008", "foo/bar", try_trailing_slash_on_400=True,
@ -302,9 +302,6 @@ class FederationClientTests(HomeserverTestCase):
b'{"errcode":"M_UNRECOGNIZED","error":"Unrecognized request"}' b'{"errcode":"M_UNRECOGNIZED","error":"Unrecognized request"}'
) )
# We should get a 400 response, then try again
self.pump()
# We should get another request wiht a trailing slash # We should get another request wiht a trailing slash
self.assertRegex(conn.value(), b"^GET /foo/bar/") self.assertRegex(conn.value(), b"^GET /foo/bar/")