Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Faster room joins: make /joined_members block whilst the room is pa…
Browse files Browse the repository at this point in the history
…rtial stated. (#13514)
  • Loading branch information
reivilibre authored Aug 16, 2022
1 parent 5442891 commit c3516e9
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 1 deletion.
1 change: 1 addition & 0 deletions changelog.d/13514.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Faster room joins: make `/joined_members` block whilst the room is partial stated.
6 changes: 5 additions & 1 deletion synapse/handlers/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,11 @@ async def get_joined_members(self, requester: Requester, room_id: str) -> dict:
msg="Getting joined members while not being a current member of the room is forbidden.",
)

users_with_profile = await self.store.get_users_in_room_with_profiles(room_id)
users_with_profile = (
await self._state_storage_controller.get_users_in_room_with_profiles(
room_id
)
)

# If this is an AS, double check that they are allowed to see the members.
# This can either be because the AS user is in the room or because there
Expand Down
13 changes: 13 additions & 0 deletions synapse/storage/controllers/state.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
from synapse.api.constants import EventTypes
from synapse.events import EventBase
from synapse.logging.opentracing import trace
from synapse.storage.roommember import ProfileInfo
from synapse.storage.state import StateFilter
from synapse.storage.util.partial_state_events_tracker import (
PartialCurrentStateTracker,
Expand Down Expand Up @@ -506,3 +507,15 @@ async def get_current_hosts_in_room(self, room_id: str) -> Set[str]:
await self._partial_state_room_tracker.await_full_state(room_id)

return await self.stores.main.get_current_hosts_in_room(room_id)

async def get_users_in_room_with_profiles(
self, room_id: str
) -> Dict[str, ProfileInfo]:
"""
Get the current users in the room with their profiles.
If the room is currently partial-stated, this will block until the room has
full state.
"""
await self._partial_state_room_tracker.await_full_state(room_id)

return await self.stores.main.get_users_in_room_with_profiles(room_id)
3 changes: 3 additions & 0 deletions synapse/storage/databases/main/roommember.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,9 @@ async def get_users_in_room_with_profiles(
Returns:
A mapping from user ID to ProfileInfo.
Preconditions:
- There is full state available for the room (it is not partial-stated).
"""

def _get_users_in_room_with_profiles(
Expand Down

0 comments on commit c3516e9

Please sign in to comment.