mirror of
https://mau.dev/maunium/synapse.git
synced 2024-11-14 14:01:59 +01:00
Generate room sync data concurrently (#17458)
This is also what we do for standard `/sync`.
This commit is contained in:
parent
71d83477cb
commit
43c865f7c9
2 changed files with 11 additions and 2 deletions
1
changelog.d/17458.misc
Normal file
1
changelog.d/17458.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Speed up generating sliding sync responses.
|
|
@ -28,6 +28,7 @@ from synapse.api.constants import AccountDataTypes, Direction, EventTypes, Membe
|
||||||
from synapse.events import EventBase
|
from synapse.events import EventBase
|
||||||
from synapse.events.utils import strip_event
|
from synapse.events.utils import strip_event
|
||||||
from synapse.handlers.relations import BundledAggregations
|
from synapse.handlers.relations import BundledAggregations
|
||||||
|
from synapse.logging.opentracing import start_active_span, tag_args, trace
|
||||||
from synapse.storage.databases.main.roommember import extract_heroes_from_room_summary
|
from synapse.storage.databases.main.roommember import extract_heroes_from_room_summary
|
||||||
from synapse.storage.databases.main.stream import CurrentStateDeltaMembership
|
from synapse.storage.databases.main.stream import CurrentStateDeltaMembership
|
||||||
from synapse.storage.roommember import MemberSummary
|
from synapse.storage.roommember import MemberSummary
|
||||||
|
@ -43,6 +44,7 @@ from synapse.types import (
|
||||||
)
|
)
|
||||||
from synapse.types.handlers import OperationType, SlidingSyncConfig, SlidingSyncResult
|
from synapse.types.handlers import OperationType, SlidingSyncConfig, SlidingSyncResult
|
||||||
from synapse.types.state import StateFilter
|
from synapse.types.state import StateFilter
|
||||||
|
from synapse.util.async_helpers import concurrently_execute
|
||||||
from synapse.visibility import filter_events_for_client
|
from synapse.visibility import filter_events_for_client
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
@ -592,11 +594,14 @@ class SlidingSyncHandler:
|
||||||
|
|
||||||
# Fetch room data
|
# Fetch room data
|
||||||
rooms: Dict[str, SlidingSyncResult.RoomResult] = {}
|
rooms: Dict[str, SlidingSyncResult.RoomResult] = {}
|
||||||
for room_id, room_sync_config in relevant_room_map.items():
|
|
||||||
|
@trace
|
||||||
|
@tag_args
|
||||||
|
async def handle_room(room_id: str) -> None:
|
||||||
room_sync_result = await self.get_room_sync_data(
|
room_sync_result = await self.get_room_sync_data(
|
||||||
user=sync_config.user,
|
user=sync_config.user,
|
||||||
room_id=room_id,
|
room_id=room_id,
|
||||||
room_sync_config=room_sync_config,
|
room_sync_config=relevant_room_map[room_id],
|
||||||
room_membership_for_user_at_to_token=room_membership_for_user_map[
|
room_membership_for_user_at_to_token=room_membership_for_user_map[
|
||||||
room_id
|
room_id
|
||||||
],
|
],
|
||||||
|
@ -606,6 +611,9 @@ class SlidingSyncHandler:
|
||||||
|
|
||||||
rooms[room_id] = room_sync_result
|
rooms[room_id] = room_sync_result
|
||||||
|
|
||||||
|
with start_active_span("sliding_sync.generate_room_entries"):
|
||||||
|
await concurrently_execute(handle_room, relevant_room_map, 10)
|
||||||
|
|
||||||
extensions = await self.get_extensions_response(
|
extensions = await self.get_extensions_response(
|
||||||
sync_config=sync_config, to_token=to_token
|
sync_config=sync_config, to_token=to_token
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue