diff options
author | Erik Johnston <erikj@element.io> | 2024-05-14 14:39:04 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-14 14:39:04 +0100 |
commit | 0b91ccce47bd821ed69ea2628f80c98f83981033 (patch) | |
tree | 98d7d822afae411d9105bfe51a6f77fa9960c69d /synapse/handlers/sync.py | |
parent | Allows CAS SSO flow to provide user IDs composed of numbers only (#17098) (diff) | |
download | synapse-0b91ccce47bd821ed69ea2628f80c98f83981033.tar.xz |
Improve perf of sync device lists (#17191)
It's almost always more efficient to query the rooms that have device list changes, rather than looking at the list of all users whose devices have changed and then look for shared rooms.
Diffstat (limited to 'synapse/handlers/sync.py')
-rw-r--r-- | synapse/handlers/sync.py | 37 |
1 files changed, 6 insertions, 31 deletions
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py index 8ff45a3353..0bef58351c 100644 --- a/synapse/handlers/sync.py +++ b/synapse/handlers/sync.py @@ -1803,38 +1803,13 @@ class SyncHandler: # Step 1a, check for changes in devices of users we share a room # with - # - # We do this in two different ways depending on what we have cached. - # If we already have a list of all the user that have changed since - # the last sync then it's likely more efficient to compare the rooms - # they're in with the rooms the syncing user is in. - # - # If we don't have that info cached then we get all the users that - # share a room with our user and check if those users have changed. - cache_result = self.store.get_cached_device_list_changes( - since_token.device_list_key - ) - if cache_result.hit: - changed_users = cache_result.entities - - result = await self.store.get_rooms_for_users(changed_users) - - for changed_user_id, entries in result.items(): - # Check if the changed user shares any rooms with the user, - # or if the changed user is the syncing user (as we always - # want to include device list updates of their own devices). - if user_id == changed_user_id or any( - rid in joined_rooms for rid in entries - ): - users_that_have_changed.add(changed_user_id) - else: - users_that_have_changed = ( - await self._device_handler.get_device_changes_in_shared_rooms( - user_id, - sync_result_builder.joined_room_ids, - from_token=since_token, - ) + users_that_have_changed = ( + await self._device_handler.get_device_changes_in_shared_rooms( + user_id, + sync_result_builder.joined_room_ids, + from_token=since_token, ) + ) # Step 1b, check for newly joined rooms for room_id in newly_joined_rooms: |