Better exception handling
This commit is contained in:
parent
ecea5af491
commit
621e7f37f1
|
@ -221,30 +221,31 @@ 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(
|
|
||||||
self.hs.get_reactor(), self.default_timeout, request, response,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Retry with a trailing slash if we received a 400 with
|
|
||||||
# 'M_UNRECOGNIZED' which some endpoints can return when omitting a
|
|
||||||
# trailing slash on Synapse <=v0.99.2.
|
|
||||||
if not (response.code == 400 and body.get("errcode") == "M_UNRECOGNIZED"):
|
|
||||||
# Enable backoff if initially disabled
|
|
||||||
send_request_args["backoff_on_404"] = backoff_on_404
|
|
||||||
|
|
||||||
# Add trailing slash
|
|
||||||
send_request_args["request"].path += "/"
|
|
||||||
|
|
||||||
response = yield self._send_request(**send_request_args)
|
|
||||||
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
|
||||||
|
# 'M_UNRECOGNIZED' which some endpoints can return when omitting a
|
||||||
|
# trailing slash on Synapse <= v0.99.2.
|
||||||
|
# Enable backoff if initially disabled
|
||||||
|
send_request_args["backoff_on_404"] = backoff_on_404
|
||||||
|
|
||||||
|
# Add trailing slash
|
||||||
|
send_request_args["request"].path += "/"
|
||||||
|
|
||||||
|
response = yield self._send_request(**send_request_args)
|
||||||
|
body = yield _handle_json_response(
|
||||||
|
self.hs.get_reactor(), self.default_timeout, request, response,
|
||||||
|
)
|
||||||
|
|
||||||
defer.returnValue(body)
|
defer.returnValue(body)
|
||||||
|
|
||||||
|
|
|
@ -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/")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue