summary refs log tree commit diff
path: root/synapse/handlers/device.py
diff options
context:
space:
mode:
authorSean Quah <8349537+squahtx@users.noreply.github.com>2022-09-23 13:44:03 +0100
committerGitHub <noreply@github.com>2022-09-23 13:44:03 +0100
commit03c2bfb7f89d637930da52723161ce74d4f89233 (patch)
tree3195d65aaa92841b5b179f4fb2214a58cf3b3d70 /synapse/handlers/device.py
parentFaster Remote Room Joins: tell remote homeservers that we are unable to autho... (diff)
downloadsynapse-03c2bfb7f89d637930da52723161ce74d4f89233.tar.xz
Send device list updates out to servers in partially joined rooms (#13874)
Use the provided list of servers in the room from the `/send_join`
response, since we will not know which users are in the room.  This
isn't sufficient to ensure that all remote servers receive the right
device list updates, since the `/send_join` response may be inaccurate
or we may calculate the membership state of new users in the room
incorrectly.

Signed-off-by: Sean Quah <seanq@matrix.org>
Diffstat (limited to 'synapse/handlers/device.py')
-rw-r--r--synapse/handlers/device.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/synapse/handlers/device.py b/synapse/handlers/device.py

index 901e2310b7..6566b3bf3d 100644 --- a/synapse/handlers/device.py +++ b/synapse/handlers/device.py
@@ -688,11 +688,15 @@ class DeviceHandler(DeviceWorkerHandler): # Ignore any users that aren't ours if self.hs.is_mine_id(user_id): hosts = set( - await self._storage_controllers.state.get_current_hosts_in_room( + await self._storage_controllers.state.get_current_hosts_in_room_or_partial_state_approximation( room_id ) ) hosts.discard(self.server_name) + # For rooms with partial state, `hosts` is merely an + # approximation. When we transition to a full state room, we + # will have to send out device list updates to any servers we + # missed. # Check if we've already sent this update to some hosts if current_stream_id == stream_id: