Skip to content

Commit 43c865f

Browse files
authored
Generate room sync data concurrently (#17458)
This is also what we do for standard `/sync`.
1 parent 71d8347 commit 43c865f

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

changelog.d/17458.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Speed up generating sliding sync responses.

synapse/handlers/sliding_sync.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from synapse.events import EventBase
2929
from synapse.events.utils import strip_event
3030
from synapse.handlers.relations import BundledAggregations
31+
from synapse.logging.opentracing import start_active_span, tag_args, trace
3132
from synapse.storage.databases.main.roommember import extract_heroes_from_room_summary
3233
from synapse.storage.databases.main.stream import CurrentStateDeltaMembership
3334
from synapse.storage.roommember import MemberSummary
@@ -43,6 +44,7 @@
4344
)
4445
from synapse.types.handlers import OperationType, SlidingSyncConfig, SlidingSyncResult
4546
from synapse.types.state import StateFilter
47+
from synapse.util.async_helpers import concurrently_execute
4648
from synapse.visibility import filter_events_for_client
4749

4850
if TYPE_CHECKING:
@@ -592,11 +594,14 @@ async def current_sync_for_user(
592594

593595
# Fetch room data
594596
rooms: Dict[str, SlidingSyncResult.RoomResult] = {}
595-
for room_id, room_sync_config in relevant_room_map.items():
597+
598+
@trace
599+
@tag_args
600+
async def handle_room(room_id: str) -> None:
596601
room_sync_result = await self.get_room_sync_data(
597602
user=sync_config.user,
598603
room_id=room_id,
599-
room_sync_config=room_sync_config,
604+
room_sync_config=relevant_room_map[room_id],
600605
room_membership_for_user_at_to_token=room_membership_for_user_map[
601606
room_id
602607
],
@@ -606,6 +611,9 @@ async def current_sync_for_user(
606611

607612
rooms[room_id] = room_sync_result
608613

614+
with start_active_span("sliding_sync.generate_room_entries"):
615+
await concurrently_execute(handle_room, relevant_room_map, 10)
616+
609617
extensions = await self.get_extensions_response(
610618
sync_config=sync_config, to_token=to_token
611619
)

0 commit comments

Comments
 (0)