diff options
author | Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | 2019-05-21 13:47:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-21 13:47:25 +0100 |
commit | 04d53794d6848cca2567d67f494ba8405d0bf1cf (patch) | |
tree | 87512338fea4a3a1ba714060a472da88e169d4e4 /synapse/federation/federation_server.py | |
parent | Revert "expose SlavedProfileStore to ClientReaderSlavedStore (#5200)" (diff) | |
download | synapse-04d53794d6848cca2567d67f494ba8405d0bf1cf.tar.xz |
Fix error handling for rooms whose versions are unknown. (#5219)
If we remove support for a particular room version, we should behave more gracefully. This should make client requests fail with a 400 rather than a 500, and will ignore individiual PDUs in a federation transaction, rather than the whole transaction.
Diffstat (limited to '')
-rw-r--r-- | synapse/federation/federation_server.py | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/synapse/federation/federation_server.py b/synapse/federation/federation_server.py index df60828dba..4c28c1dc3c 100644 --- a/synapse/federation/federation_server.py +++ b/synapse/federation/federation_server.py @@ -33,6 +33,7 @@ from synapse.api.errors import ( IncompatibleRoomVersionError, NotFoundError, SynapseError, + UnsupportedRoomVersionError, ) from synapse.api.room_versions import KNOWN_ROOM_VERSIONS from synapse.crypto.event_signing import compute_event_signature @@ -198,11 +199,22 @@ class FederationServer(FederationBase): try: room_version = yield self.store.get_room_version(room_id) - format_ver = room_version_to_event_format(room_version) except NotFoundError: logger.info("Ignoring PDU for unknown room_id: %s", room_id) continue + try: + format_ver = room_version_to_event_format(room_version) + except UnsupportedRoomVersionError: + # this can happen if support for a given room version is withdrawn, + # so that we still get events for said room. + logger.info( + "Ignoring PDU for room %s with unknown version %s", + room_id, + room_version, + ) + continue + event = event_from_pdu_json(p, format_ver) pdus_by_room.setdefault(room_id, []).append(event) |