diff --git a/synapse/http/matrixfederationclient.py b/synapse/http/matrixfederationclient.py
index b27c4c1c38..3c27686a89 100644
--- a/synapse/http/matrixfederationclient.py
+++ b/synapse/http/matrixfederationclient.py
@@ -221,30 +221,31 @@ class MatrixFederationHttpClient(object):
"""
try:
response = yield self._send_request(**send_request_args)
+
+ # 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,
+ )
except HttpResponseException as e:
- # Received a 400. Raise unless we're retrying
if not try_trailing_slash_on_400:
+ # Received an error >= 300. Raise unless we're retrying
raise e
-
- # 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,
- )
+ 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.
- 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
+ # 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 += "/"
+ # 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,
- )
+ 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)
diff --git a/tests/http/test_fedclient.py b/tests/http/test_fedclient.py
index b45eee3a82..84216db44f 100644
--- a/tests/http/test_fedclient.py
+++ b/tests/http/test_fedclient.py
@@ -272,7 +272,7 @@ class FederationClientTests(HomeserverTestCase):
"""
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
- 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(
"testserv:8008", "foo/bar", try_trailing_slash_on_400=True,
@@ -302,9 +302,6 @@ class FederationClientTests(HomeserverTestCase):
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
self.assertRegex(conn.value(), b"^GET /foo/bar/")
|