mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-25 11:05:49 +03:00
Make get_room_version use cached get_room_version_id. (#11808)
This commit is contained in:
parent
5f62a094de
commit
8e56a1b73c
3 changed files with 18 additions and 15 deletions
1
changelog.d/11808.misc
Normal file
1
changelog.d/11808.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Make method `get_room_version` use cached `get_room_version_id`.
|
|
@ -42,6 +42,16 @@ logger = logging.getLogger(__name__)
|
||||||
MAX_STATE_DELTA_HOPS = 100
|
MAX_STATE_DELTA_HOPS = 100
|
||||||
|
|
||||||
|
|
||||||
|
def _retrieve_and_check_room_version(room_id: str, room_version_id: str) -> RoomVersion:
|
||||||
|
v = KNOWN_ROOM_VERSIONS.get(room_version_id)
|
||||||
|
if not v:
|
||||||
|
raise UnsupportedRoomVersionError(
|
||||||
|
"Room %s uses a room version %s which is no longer supported"
|
||||||
|
% (room_id, room_version_id)
|
||||||
|
)
|
||||||
|
return v
|
||||||
|
|
||||||
|
|
||||||
# this inherits from EventsWorkerStore because it calls self.get_events
|
# this inherits from EventsWorkerStore because it calls self.get_events
|
||||||
class StateGroupWorkerStore(EventsWorkerStore, SQLBaseStore):
|
class StateGroupWorkerStore(EventsWorkerStore, SQLBaseStore):
|
||||||
"""The parts of StateGroupStore that can be called from workers."""
|
"""The parts of StateGroupStore that can be called from workers."""
|
||||||
|
@ -62,11 +72,8 @@ class StateGroupWorkerStore(EventsWorkerStore, SQLBaseStore):
|
||||||
Typically this happens if support for the room's version has been
|
Typically this happens if support for the room's version has been
|
||||||
removed from Synapse.
|
removed from Synapse.
|
||||||
"""
|
"""
|
||||||
return await self.db_pool.runInteraction(
|
room_version_id = await self.get_room_version_id(room_id)
|
||||||
"get_room_version_txn",
|
return _retrieve_and_check_room_version(room_id, room_version_id)
|
||||||
self.get_room_version_txn,
|
|
||||||
room_id,
|
|
||||||
)
|
|
||||||
|
|
||||||
def get_room_version_txn(
|
def get_room_version_txn(
|
||||||
self, txn: LoggingTransaction, room_id: str
|
self, txn: LoggingTransaction, room_id: str
|
||||||
|
@ -82,15 +89,7 @@ class StateGroupWorkerStore(EventsWorkerStore, SQLBaseStore):
|
||||||
removed from Synapse.
|
removed from Synapse.
|
||||||
"""
|
"""
|
||||||
room_version_id = self.get_room_version_id_txn(txn, room_id)
|
room_version_id = self.get_room_version_id_txn(txn, room_id)
|
||||||
v = KNOWN_ROOM_VERSIONS.get(room_version_id)
|
return _retrieve_and_check_room_version(room_id, room_version_id)
|
||||||
|
|
||||||
if not v:
|
|
||||||
raise UnsupportedRoomVersionError(
|
|
||||||
"Room %s uses a room version %s which is no longer supported"
|
|
||||||
% (room_id, room_version_id)
|
|
||||||
)
|
|
||||||
|
|
||||||
return v
|
|
||||||
|
|
||||||
@cached(max_entries=10000)
|
@cached(max_entries=10000)
|
||||||
async def get_room_version_id(self, room_id: str) -> str:
|
async def get_room_version_id(self, room_id: str) -> str:
|
||||||
|
|
|
@ -658,7 +658,7 @@ class SpaceSummaryTestCase(unittest.HomeserverTestCase):
|
||||||
|
|
||||||
def test_unknown_room_version(self):
|
def test_unknown_room_version(self):
|
||||||
"""
|
"""
|
||||||
If an room with an unknown room version is encountered it should not cause
|
If a room with an unknown room version is encountered it should not cause
|
||||||
the entire summary to skip.
|
the entire summary to skip.
|
||||||
"""
|
"""
|
||||||
# Poke the database and update the room version to an unknown one.
|
# Poke the database and update the room version to an unknown one.
|
||||||
|
@ -670,6 +670,9 @@ class SpaceSummaryTestCase(unittest.HomeserverTestCase):
|
||||||
desc="updated-room-version",
|
desc="updated-room-version",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
# Invalidate method so that it returns the currently updated version
|
||||||
|
# instead of the cached version.
|
||||||
|
self.hs.get_datastores().main.get_room_version_id.invalidate((self.room,))
|
||||||
|
|
||||||
# The result should have only the space, along with a link from space -> room.
|
# The result should have only the space, along with a link from space -> room.
|
||||||
expected = [(self.space, [self.room])]
|
expected = [(self.space, [self.room])]
|
||||||
|
|
Loading…
Reference in a new issue