Skip to content

Commit

Permalink
Minor perf speed up for large accounts on SSS (#17751)
Browse files Browse the repository at this point in the history
This works as instead of passing *all* rooms to `record_sent_rooms` we
only need to pass rooms that were previously not in the LIVE state.

This came from a py-spy where we were spending ~10% CPU calling these
functions. Note that `record_sent_rooms` is a no-op for rooms that are
already in the `LIVE` state, so we only need to call them for
`PREVIOUSLY` or `INITIAL` rooms.
  • Loading branch information
erikjohnston authored Sep 30, 2024
1 parent ef9ef99 commit ece66ba
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 4 deletions.
1 change: 1 addition & 0 deletions changelog.d/17751.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Minor performance increase for large accounts using sliding sync.
10 changes: 6 additions & 4 deletions synapse/handlers/sliding_sync/extensions.py
Original file line number Diff line number Diff line change
Expand Up @@ -572,7 +572,8 @@ async def handle_previously(room_id: str) -> None:

# Now record which rooms are now up to data, and which rooms have
# pending updates to send.
new_connection_state.account_data.record_sent_rooms(relevant_room_ids)
new_connection_state.account_data.record_sent_rooms(previously_rooms.keys())
new_connection_state.account_data.record_sent_rooms(initial_rooms)
missing_updates = (
all_updates_since_the_from_token.keys() - relevant_room_ids
)
Expand Down Expand Up @@ -763,9 +764,10 @@ async def handle_previously_room(room_id: str) -> None:

room_id_to_receipt_map[room_id] = {"type": type, "content": content}

# Now we update the per-connection state to track which receipts we have
# and haven't sent down.
new_connection_state.receipts.record_sent_rooms(relevant_room_ids)
# Update the per-connection state to track which rooms we have sent
# all the receipts for.
new_connection_state.receipts.record_sent_rooms(previously_rooms.keys())
new_connection_state.receipts.record_sent_rooms(initial_rooms)

if from_token:
# Now find the set of rooms that may have receipts that we're not sending
Expand Down

0 comments on commit ece66ba

Please sign in to comment.