summary refs log tree commit diff
diff options
context:
space:
mode:
authorSean Quah <8349537+squahtx@users.noreply.github.com>2023-01-26 10:38:49 +0000
committerGitHub <noreply@github.com>2023-01-26 10:38:49 +0000
commitcf66d712c615b96bce19e44118cce1ebda41d0b8 (patch)
tree829cb0684566ce09e8cb987a1cc4b67e13e643b8
parentFix link syntax in changelog (diff)
downloadsynapse-cf66d712c615b96bce19e44118cce1ebda41d0b8.tar.xz
Fix initialization of `_device_list_id_gen` (#14914)
On startup, the `_device_list_id_gen` stream id generator is initialized
using the maximum stream id seen in a list of tables. When we started
populating the `device_list_remote_pending` table in #13913, we forgot
to add it to the aforementioned list of tables, so the stream id
generator can hand out old stream ids after a restart. The end result is
that Synapse can fail to handle device list update EDUs after a restart
when a partial state join is in progress.

Add the `device_list_remote_pending` table to the list of tables to
consider when initializing the `_device_list_id_gen` stream id generator.

Signed-off-by: Sean Quah <seanq@matrix.org>
-rw-r--r--changelog.d/14914.bugfix1
-rw-r--r--synapse/storage/databases/main/devices.py1
2 files changed, 2 insertions, 0 deletions
diff --git a/changelog.d/14914.bugfix b/changelog.d/14914.bugfix
new file mode 100644
index 0000000000..af73cca70f
--- /dev/null
+++ b/changelog.d/14914.bugfix
@@ -0,0 +1 @@
+Faster joins: Fix a bug introduced in Synapse 1.69 where device list EDUs could fail to be handled after a restart when a faster join sync is in progress.
diff --git a/synapse/storage/databases/main/devices.py b/synapse/storage/databases/main/devices.py
index 903606fb46..e8b6cc6b80 100644
--- a/synapse/storage/databases/main/devices.py
+++ b/synapse/storage/databases/main/devices.py
@@ -99,6 +99,7 @@ class DeviceWorkerStore(RoomMemberWorkerStore, EndToEndKeyWorkerStore):
                 ("user_signature_stream", "stream_id"),
                 ("device_lists_outbound_pokes", "stream_id"),
                 ("device_lists_changes_in_room", "stream_id"),
+                ("device_lists_remote_pending", "stream_id"),
             ],
             is_writer=hs.config.worker.worker_app is None,
         )