Ignore rooms with unknown room versions in the spaces summary. (#10727)
This avoids breaking the entire endpoint if a room with an unsupported room version is encountered.pull/10738/head
parent
6258730ebe
commit
c586d6803a
|
@ -0,0 +1 @@
|
|||
Do not include rooms with unknown room versions in the spaces summary results.
|
|
@ -28,7 +28,14 @@ from synapse.api.constants import (
|
|||
Membership,
|
||||
RoomTypes,
|
||||
)
|
||||
from synapse.api.errors import AuthError, Codes, NotFoundError, StoreError, SynapseError
|
||||
from synapse.api.errors import (
|
||||
AuthError,
|
||||
Codes,
|
||||
NotFoundError,
|
||||
StoreError,
|
||||
SynapseError,
|
||||
UnsupportedRoomVersionError,
|
||||
)
|
||||
from synapse.events import EventBase
|
||||
from synapse.events.utils import format_event_for_client_v2
|
||||
from synapse.types import JsonDict
|
||||
|
@ -814,7 +821,12 @@ class RoomSummaryHandler:
|
|||
logger.info("room %s is unknown, omitting from summary", room_id)
|
||||
return False
|
||||
|
||||
room_version = await self._store.get_room_version(room_id)
|
||||
try:
|
||||
room_version = await self._store.get_room_version(room_id)
|
||||
except UnsupportedRoomVersionError:
|
||||
# If a room with an unsupported room version is encountered, ignore
|
||||
# it to avoid breaking the entire summary response.
|
||||
return False
|
||||
|
||||
# Include the room if it has join rules of public or knock.
|
||||
join_rules_event_id = state_ids.get((EventTypes.JoinRules, ""))
|
||||
|
|
|
@ -581,6 +581,31 @@ class SpaceSummaryTestCase(unittest.HomeserverTestCase):
|
|||
]
|
||||
self._assert_hierarchy(result, expected)
|
||||
|
||||
def test_unknown_room_version(self):
|
||||
"""
|
||||
If an room with an unknown room version is encountered it should not cause
|
||||
the entire summary to skip.
|
||||
"""
|
||||
# Poke the database and update the room version to an unknown one.
|
||||
self.get_success(
|
||||
self.hs.get_datastores().main.db_pool.simple_update(
|
||||
"rooms",
|
||||
keyvalues={"room_id": self.room},
|
||||
updatevalues={"room_version": "unknown-room-version"},
|
||||
desc="updated-room-version",
|
||||
)
|
||||
)
|
||||
|
||||
result = self.get_success(self.handler.get_space_summary(self.user, self.space))
|
||||
# The result should have only the space, along with a link from space -> room.
|
||||
expected = [(self.space, [self.room])]
|
||||
self._assert_rooms(result, expected)
|
||||
|
||||
result = self.get_success(
|
||||
self.handler.get_room_hierarchy(self.user, self.space)
|
||||
)
|
||||
self._assert_hierarchy(result, expected)
|
||||
|
||||
def test_fed_complex(self):
|
||||
"""
|
||||
Return data over federation and ensure that it is handled properly.
|
||||
|
|
Loading…
Reference in New Issue