mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2024-12-25 01:09:25 -05:00
Batch up calls to get_rooms_for_users
(#14109)
This commit is contained in:
parent
09be8ab5f9
commit
f9bc5428c4
1
changelog.d/14109.misc
Normal file
1
changelog.d/14109.misc
Normal file
@ -0,0 +1 @@
|
||||
Break up calls to fetch rooms for many users. Contributed by Nick @ Beeper (@fizzadar).
|
@ -666,7 +666,7 @@ class RoomMemberWorkerStore(EventsWorkerStore):
|
||||
cached_method_name="get_rooms_for_user",
|
||||
list_name="user_ids",
|
||||
)
|
||||
async def get_rooms_for_users(
|
||||
async def _get_rooms_for_users(
|
||||
self, user_ids: Collection[str]
|
||||
) -> Dict[str, FrozenSet[str]]:
|
||||
"""A batched version of `get_rooms_for_user`.
|
||||
@ -697,6 +697,21 @@ class RoomMemberWorkerStore(EventsWorkerStore):
|
||||
|
||||
return {key: frozenset(rooms) for key, rooms in user_rooms.items()}
|
||||
|
||||
async def get_rooms_for_users(
|
||||
self, user_ids: Collection[str]
|
||||
) -> Dict[str, FrozenSet[str]]:
|
||||
"""A batched wrapper around `_get_rooms_for_users`, to prevent locking
|
||||
other calls to `get_rooms_for_user` for large user lists.
|
||||
"""
|
||||
all_user_rooms: Dict[str, FrozenSet[str]] = {}
|
||||
|
||||
# 250 users is pretty arbitrary but the data can be quite large if users
|
||||
# are in many rooms.
|
||||
for user_ids in batch_iter(user_ids, 250):
|
||||
all_user_rooms.update(await self._get_rooms_for_users(user_ids))
|
||||
|
||||
return all_user_rooms
|
||||
|
||||
@cached(max_entries=10000)
|
||||
async def does_pair_of_users_share_a_room(
|
||||
self, user_id: str, other_user_id: str
|
||||
|
Loading…
Reference in New Issue
Block a user