diff options
Diffstat (limited to 'synapse/federation/federation_client.py')
-rw-r--r-- | synapse/federation/federation_client.py | 112 |
1 files changed, 7 insertions, 105 deletions
diff --git a/synapse/federation/federation_client.py b/synapse/federation/federation_client.py index fee1477ab6..3b85b135e0 100644 --- a/synapse/federation/federation_client.py +++ b/synapse/federation/federation_client.py @@ -128,7 +128,7 @@ class FederationClient(FederationBase): reset_expiry_on_get=False, ) - def _clear_tried_cache(self) -> None: + def _clear_tried_cache(self): """Clear pdu_destination_tried cache""" now = self._clock.time_msec() @@ -800,7 +800,7 @@ class FederationClient(FederationBase): no servers successfully handle the request. """ - async def send_request(destination: str) -> SendJoinResult: + async def send_request(destination) -> SendJoinResult: response = await self._do_send_join(room_version, destination, pdu) # If an event was returned (and expected to be returned): @@ -1395,28 +1395,11 @@ class FederationClient(FederationBase): async def send_request( destination: str, ) -> Tuple[JsonDict, Sequence[JsonDict], Sequence[str]]: - try: - res = await self.transport_layer.get_room_hierarchy( - destination=destination, - room_id=room_id, - suggested_only=suggested_only, - ) - except HttpResponseException as e: - # If an error is received that is due to an unrecognised endpoint, - # fallback to the unstable endpoint. Otherwise consider it a - # legitmate error and raise. - if not self._is_unknown_endpoint(e): - raise - - logger.debug( - "Couldn't fetch room hierarchy with the v1 API, falling back to the unstable API" - ) - - res = await self.transport_layer.get_room_hierarchy_unstable( - destination=destination, - room_id=room_id, - suggested_only=suggested_only, - ) + res = await self.transport_layer.get_room_hierarchy( + destination=destination, + room_id=room_id, + suggested_only=suggested_only, + ) room = res.get("room") if not isinstance(room, dict): @@ -1466,10 +1449,6 @@ class FederationClient(FederationBase): if e.code != 502: raise - logger.debug( - "Couldn't fetch room hierarchy, falling back to the spaces API" - ) - # Fallback to the old federation API and translate the results if # no servers implement the new API. # @@ -1517,83 +1496,6 @@ class FederationClient(FederationBase): self._get_room_hierarchy_cache[(room_id, suggested_only)] = result return result - async def timestamp_to_event( - self, destination: str, room_id: str, timestamp: int, direction: str - ) -> "TimestampToEventResponse": - """ - Calls a remote federating server at `destination` asking for their - closest event to the given timestamp in the given direction. Also - validates the response to always return the expected keys or raises an - error. - - Args: - destination: Domain name of the remote homeserver - room_id: Room to fetch the event from - timestamp: The point in time (inclusive) we should navigate from in - the given direction to find the closest event. - direction: ["f"|"b"] to indicate whether we should navigate forward - or backward from the given timestamp to find the closest event. - - Returns: - A parsed TimestampToEventResponse including the closest event_id - and origin_server_ts - - Raises: - Various exceptions when the request fails - InvalidResponseError when the response does not have the correct - keys or wrong types - """ - remote_response = await self.transport_layer.timestamp_to_event( - destination, room_id, timestamp, direction - ) - - if not isinstance(remote_response, dict): - raise InvalidResponseError( - "Response must be a JSON dictionary but received %r" % remote_response - ) - - try: - return TimestampToEventResponse.from_json_dict(remote_response) - except ValueError as e: - raise InvalidResponseError(str(e)) - - -@attr.s(frozen=True, slots=True, auto_attribs=True) -class TimestampToEventResponse: - """Typed response dictionary for the federation /timestamp_to_event endpoint""" - - event_id: str - origin_server_ts: int - - # the raw data, including the above keys - data: JsonDict - - @classmethod - def from_json_dict(cls, d: JsonDict) -> "TimestampToEventResponse": - """Parsed response from the federation /timestamp_to_event endpoint - - Args: - d: JSON object response to be parsed - - Raises: - ValueError if d does not the correct keys or they are the wrong types - """ - - event_id = d.get("event_id") - if not isinstance(event_id, str): - raise ValueError( - "Invalid response: 'event_id' must be a str but received %r" % event_id - ) - - origin_server_ts = d.get("origin_server_ts") - if not isinstance(origin_server_ts, int): - raise ValueError( - "Invalid response: 'origin_server_ts' must be a int but received %r" - % origin_server_ts - ) - - return cls(event_id, origin_server_ts, d) - @attr.s(frozen=True, slots=True, auto_attribs=True) class FederationSpaceSummaryEventResult: |