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.
This commit is contained in:
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,
|
Membership,
|
||||||
RoomTypes,
|
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 import EventBase
|
||||||
from synapse.events.utils import format_event_for_client_v2
|
from synapse.events.utils import format_event_for_client_v2
|
||||||
from synapse.types import JsonDict
|
from synapse.types import JsonDict
|
||||||
|
@ -814,7 +821,12 @@ class RoomSummaryHandler:
|
||||||
logger.info("room %s is unknown, omitting from summary", room_id)
|
logger.info("room %s is unknown, omitting from summary", room_id)
|
||||||
return False
|
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.
|
# Include the room if it has join rules of public or knock.
|
||||||
join_rules_event_id = state_ids.get((EventTypes.JoinRules, ""))
|
join_rules_event_id = state_ids.get((EventTypes.JoinRules, ""))
|
||||||
|
|
|
@ -581,6 +581,31 @@ class SpaceSummaryTestCase(unittest.HomeserverTestCase):
|
||||||
]
|
]
|
||||||
self._assert_hierarchy(result, expected)
|
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):
|
def test_fed_complex(self):
|
||||||
"""
|
"""
|
||||||
Return data over federation and ensure that it is handled properly.
|
Return data over federation and ensure that it is handled properly.
|
||||||
|
|
Loading…
Reference in New Issue