mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-17 09:13:51 +01:00
Retry certain federation requests on 404
This commit is contained in:
parent
525dd02bbe
commit
64ff11019e
2 changed files with 50 additions and 5 deletions
|
@ -52,7 +52,7 @@ class TransportLayerClient(object):
|
||||||
destination, room_id)
|
destination, room_id)
|
||||||
|
|
||||||
path = _create_v1_path("/state/%s", room_id)
|
path = _create_v1_path("/state/%s", room_id)
|
||||||
return self.client.get_json(
|
return self.client.get_json_with_trailing_slashes_on_404(
|
||||||
destination, path=path, args={"event_id": event_id},
|
destination, path=path, args={"event_id": event_id},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ class TransportLayerClient(object):
|
||||||
destination, room_id)
|
destination, room_id)
|
||||||
|
|
||||||
path = _create_v1_path("/state_ids/%s", room_id)
|
path = _create_v1_path("/state_ids/%s", room_id)
|
||||||
return self.client.get_json(
|
return self.client.get_json_with_trailing_slashes_on_404(
|
||||||
destination, path=path, args={"event_id": event_id},
|
destination, path=path, args={"event_id": event_id},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ class TransportLayerClient(object):
|
||||||
destination, event_id)
|
destination, event_id)
|
||||||
|
|
||||||
path = _create_v1_path("/event/%s", event_id)
|
path = _create_v1_path("/event/%s", event_id)
|
||||||
return self.client.get_json(destination, path=path, timeout=timeout)
|
return self.client.get_json_with_trailing_slashes_on_404(destination, path=path, timeout=timeout)
|
||||||
|
|
||||||
@log_function
|
@log_function
|
||||||
def backfill(self, destination, room_id, event_tuples, limit):
|
def backfill(self, destination, room_id, event_tuples, limit):
|
||||||
|
@ -128,7 +128,7 @@ class TransportLayerClient(object):
|
||||||
"limit": [str(limit)],
|
"limit": [str(limit)],
|
||||||
}
|
}
|
||||||
|
|
||||||
return self.client.get_json(
|
return self.client.get_json_with_trailing_slashes_on_404(
|
||||||
destination,
|
destination,
|
||||||
path=path,
|
path=path,
|
||||||
args=args,
|
args=args,
|
||||||
|
@ -169,7 +169,7 @@ class TransportLayerClient(object):
|
||||||
|
|
||||||
path = _create_v1_path("/send/%s", transaction.transaction_id)
|
path = _create_v1_path("/send/%s", transaction.transaction_id)
|
||||||
|
|
||||||
response = yield self.client.put_json(
|
response = yield self.client.put_json_with_trailing_slashes_on_404(
|
||||||
transaction.destination,
|
transaction.destination,
|
||||||
path=path,
|
path=path,
|
||||||
data=json_data,
|
data=json_data,
|
||||||
|
|
|
@ -643,6 +643,51 @@ class MatrixFederationHttpClient(object):
|
||||||
)
|
)
|
||||||
defer.returnValue(body)
|
defer.returnValue(body)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def get_json_with_trailing_slashes_on_404(self, args={}):
|
||||||
|
"""Runs client.get_json under the hood, but if receiving a 404, tries
|
||||||
|
the request again with a trailing slash. This is a result of removing
|
||||||
|
trailing slashes from some federation endpoints and in an effort to
|
||||||
|
remain backwards compatible with older versions of Synapse, we try
|
||||||
|
again if a server requires a trailing slash.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
args (dict): A dictionary of arguments matching those provided by put_json.
|
||||||
|
Returns:
|
||||||
|
Deferred[dict|list]: Succeeds when we get a 2xx HTTP response. The
|
||||||
|
result will be the decoded JSON body.
|
||||||
|
"""
|
||||||
|
response = yield self.get_json(**args)
|
||||||
|
|
||||||
|
# Retry with a trailing slash if we received a 404
|
||||||
|
if response.code == 404:
|
||||||
|
args["path"] += "/"
|
||||||
|
response = yield self.get_json(**args)
|
||||||
|
|
||||||
|
defer.returnValue(response)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def put_json_with_trailing_slashes_on_404(self, args={}):
|
||||||
|
"""Runs client.put_json under the hood, but if receiving a 404, tries
|
||||||
|
the request again with a trailing slash.
|
||||||
|
|
||||||
|
See get_json_with_trailing_slashes_on_404 for more details.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
args (dict): A dictionary of arguments matching those provided by put_json.
|
||||||
|
Returns:
|
||||||
|
Deferred[dict|list]: Succeeds when we get a 2xx HTTP response. The
|
||||||
|
result will be the decoded JSON body.
|
||||||
|
"""
|
||||||
|
response = yield self.put_json(**args)
|
||||||
|
|
||||||
|
# Retry with a trailing slash if we received a 404
|
||||||
|
if response.code == 404:
|
||||||
|
args["path"] += "/"
|
||||||
|
response = yield self.put_json(**args)
|
||||||
|
|
||||||
|
defer.returnValue(response)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def delete_json(self, destination, path, long_retries=False,
|
def delete_json(self, destination, path, long_retries=False,
|
||||||
timeout=None, ignore_backoff=False, args={}):
|
timeout=None, ignore_backoff=False, args={}):
|
||||||
|
|
Loading…
Reference in a new issue