mirror of
https://mau.dev/maunium/synapse.git
synced 2024-11-12 04:52:26 +01:00
Sliding Sync: Batch up fetching receipts (#17589)
This is to make initial sliding sync a bit faster
This commit is contained in:
parent
8b8d74d12f
commit
950ba844f7
2 changed files with 17 additions and 14 deletions
1
changelog.d/17589.misc
Normal file
1
changelog.d/17589.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Correctly track read receipts that should be sent down in experimental sliding sync.
|
|
@ -2858,6 +2858,7 @@ class SlidingSyncHandler:
|
||||||
account_data_by_room_map=account_data_by_room_map,
|
account_data_by_room_map=account_data_by_room_map,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@trace
|
||||||
async def get_receipts_extension_response(
|
async def get_receipts_extension_response(
|
||||||
self,
|
self,
|
||||||
sync_config: SlidingSyncConfig,
|
sync_config: SlidingSyncConfig,
|
||||||
|
@ -2966,24 +2967,25 @@ class SlidingSyncHandler:
|
||||||
# from that room but we only want to include receipts for events
|
# from that room but we only want to include receipts for events
|
||||||
# in the timeline to avoid bloating and blowing up the sync response
|
# in the timeline to avoid bloating and blowing up the sync response
|
||||||
# as the number of users in the room increases. (this behavior is part of the spec)
|
# as the number of users in the room increases. (this behavior is part of the spec)
|
||||||
for room_id in initial_rooms:
|
initial_rooms = {
|
||||||
room_result = actual_room_response_map.get(room_id)
|
room_id
|
||||||
if room_result is None:
|
for room_id in initial_rooms
|
||||||
continue
|
if room_id in actual_room_response_map
|
||||||
|
}
|
||||||
relevant_event_ids = [
|
if initial_rooms:
|
||||||
event.event_id for event in room_result.timeline_events
|
initial_receipts = await self.store.get_linearized_receipts_for_rooms(
|
||||||
]
|
room_ids=initial_rooms,
|
||||||
|
|
||||||
# TODO: In the future, it would be good to fetch less receipts
|
|
||||||
# out of the database in the first place but we would need to
|
|
||||||
# add a new `event_id` index to `receipts_linearized`.
|
|
||||||
initial_receipts = await self.store.get_linearized_receipts_for_room(
|
|
||||||
room_id=room_id,
|
|
||||||
to_key=to_token.receipt_key,
|
to_key=to_token.receipt_key,
|
||||||
)
|
)
|
||||||
|
|
||||||
for receipt in initial_receipts:
|
for receipt in initial_receipts:
|
||||||
|
relevant_event_ids = {
|
||||||
|
event.event_id
|
||||||
|
for event in actual_room_response_map[
|
||||||
|
receipt["room_id"]
|
||||||
|
].timeline_events
|
||||||
|
}
|
||||||
|
|
||||||
content = {
|
content = {
|
||||||
event_id: content_value
|
event_id: content_value
|
||||||
for event_id, content_value in receipt["content"].items()
|
for event_id, content_value in receipt["content"].items()
|
||||||
|
|
Loading…
Reference in a new issue