summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--synapse/handlers/e2e_keys.py76
1 files changed, 43 insertions, 33 deletions
diff --git a/synapse/handlers/e2e_keys.py b/synapse/handlers/e2e_keys.py
index 4c9124b7bd..de9d8390b0 100644
--- a/synapse/handlers/e2e_keys.py
+++ b/synapse/handlers/e2e_keys.py
@@ -133,6 +133,12 @@ class E2eKeysHandler(object):
         @opentracing.trace_deferred
         @defer.inlineCallbacks
         def do_remote_query(destination):
+            """This is called when we are querying the device list of a user on
+            a remote homeserver and their device list is not in the device list
+            cache. If we share a room with this user and we're not querying for
+            specific user we will update the cache
+            with their device list."""
+
             destination_query = remote_queries_not_in_cache[destination]
 
             opentracing.set_tag("key_query", destination_query)
@@ -149,39 +155,43 @@ class E2eKeysHandler(object):
                 if user_id not in user_ids_updated:
                     try:
                         with PreserveLoggingContext(LoggingContext.current_context()):
-                            room_ids = yield self.store.get_rooms_for_user(user_id)
-                            if not device_list and room_ids:
-                                opentracing.log_kv(
-                                    {
-                                        "message": "Resyncing devices for user",
-                                        "user_id": user_id,
-                                    }
-                                )
-                                user_devices = yield self.device_handler.device_list_updater.user_device_resync(
-                                    user_id
-                                )
-                                user_devices = user_devices["devices"]
-                                opentracing.log_kv(
-                                    {
-                                        "message": "got user devices",
-                                        "user_devices": user_devices,
-                                    }
-                                )
-                                for device in user_devices:
-                                    results[user_id] = {
-                                        device["device_id"]: device["keys"]
-                                    }
-                                opentracing.log_kv(
-                                    {"adding user to user_ids_updated": user_id}
-                                )
-                                user_ids_updated.append(user_id)
-                            else:
-                                opentracing.log_kv(
-                                    {
-                                        "message": "Not resyncing devices for user",
-                                        "user_id": user_id,
-                                    }
-                                )
+                            if not device_list:
+                                room_ids = yield self.store.get_rooms_for_user(user_id)
+                                if room_ids:
+                                    # We've decided we're sharing a room with this user and should
+                                    # probably be tracking their device lists. However, we haven't
+                                    # done an initial sync on the device list so we do it now.
+                                    opentracing.log_kv(
+                                        {
+                                            "message": "Resyncing devices for user",
+                                            "user_id": user_id,
+                                        }
+                                    )
+                                    user_devices = yield self.device_handler.device_list_updater.user_device_resync(
+                                        user_id
+                                    )
+                                    user_devices = user_devices["devices"]
+                                    opentracing.log_kv(
+                                        {
+                                            "message": "got user devices",
+                                            "user_devices": user_devices,
+                                        }
+                                    )
+                                    for device in user_devices:
+                                        results[user_id] = {
+                                            device["device_id"]: device["keys"]
+                                        }
+                                    opentracing.log_kv(
+                                        {"adding user to user_ids_updated": user_id}
+                                    )
+                                    user_ids_updated.append(user_id)
+                                else:
+                                    opentracing.log_kv(
+                                        {
+                                            "message": "Not resyncing devices for user",
+                                            "user_id": user_id,
+                                        }
+                                    )
                     except Exception as e:
                         failures[destination] = failures.get(destination, []).append(
                             _exception_to_failure(e)