summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erikj@jki.re>2018-10-29 18:16:48 +0000
committerGitHub <noreply@github.com>2018-10-29 18:16:48 +0000
commit169851b4128d1edab049ff629fe859754931380e (patch)
treeda8e4b661388df1d019f1984890280c71f1aba49
parentMerge pull request #4111 from matrix-org/erikj/repl_names (diff)
parentNewsfile (diff)
downloadsynapse-169851b4128d1edab049ff629fe859754931380e.tar.xz
Merge pull request #4109 from matrix-org/erikj/repl_devices
A couple of replication fixes for device lists
-rw-r--r--changelog.d/4109.misc1
-rw-r--r--synapse/storage/devices.py6
2 files changed, 6 insertions, 1 deletions
diff --git a/changelog.d/4109.misc b/changelog.d/4109.misc
new file mode 100644
index 0000000000..566c683119
--- /dev/null
+++ b/changelog.d/4109.misc
@@ -0,0 +1 @@
+Reduce replication traffic for device lists
diff --git a/synapse/storage/devices.py b/synapse/storage/devices.py
index d10ff9e4b9..62497ab63f 100644
--- a/synapse/storage/devices.py
+++ b/synapse/storage/devices.py
@@ -589,10 +589,14 @@ class DeviceStore(SQLBaseStore):
         combined list of changes to devices, and which destinations need to be
         poked. `destination` may be None if no destinations need to be poked.
         """
+        # We do a group by here as there can be a large number of duplicate
+        # entries, since we throw away device IDs.
         sql = """
-            SELECT stream_id, user_id, destination FROM device_lists_stream
+            SELECT MAX(stream_id) AS stream_id, user_id, destination
+            FROM device_lists_stream
             LEFT JOIN device_lists_outbound_pokes USING (stream_id, user_id, device_id)
             WHERE ? < stream_id AND stream_id <= ?
+            GROUP BY user_id, destination
         """
         return self._execute(
             "get_all_device_list_changes_for_remotes", None,