diff options
author | Erik Johnston <erikj@jki.re> | 2018-10-29 18:16:48 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-29 18:16:48 +0000 |
commit | 169851b4128d1edab049ff629fe859754931380e (patch) | |
tree | da8e4b661388df1d019f1984890280c71f1aba49 | |
parent | Merge pull request #4111 from matrix-org/erikj/repl_names (diff) | |
parent | Newsfile (diff) | |
download | synapse-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.misc | 1 | ||||
-rw-r--r-- | synapse/storage/devices.py | 6 |
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, |