diff options
author | Erik Johnston <erikj@element.io> | 2024-07-02 12:39:49 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-02 12:39:49 +0100 |
commit | b3b793786c82383edec6c7d3226d98dbafe3b098 (patch) | |
tree | 42799dd94510980636618488995ed133bcf4d73c /synapse/storage/databases/main/devices.py | |
parent | Fix building debian packages on non-clean checkouts (#17390) (diff) | |
download | synapse-b3b793786c82383edec6c7d3226d98dbafe3b098.tar.xz |
Fix sync waiting for an invalid token from the "future" (#17386)
Fixes https://github.com/element-hq/synapse/issues/17274, hopefully. Basically, old versions of Synapse could advance streams without persisting anything in the DB (fixed in #17229). On restart those updates would get lost, and so the position of the stream would revert to an older position. If this happened across an upgrade to a later Synapse version which included #17215, then sync could get blocked indefinitely (until the stream advanced to the position in the token). We fix this by bounding the stream positions we'll wait for to the maximum position of the underlying stream ID generator.
Diffstat (limited to 'synapse/storage/databases/main/devices.py')
-rw-r--r-- | synapse/storage/databases/main/devices.py | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/synapse/storage/databases/main/devices.py b/synapse/storage/databases/main/devices.py index 59a035dd62..53024bddc3 100644 --- a/synapse/storage/databases/main/devices.py +++ b/synapse/storage/databases/main/devices.py @@ -243,6 +243,9 @@ class DeviceWorkerStore(RoomMemberWorkerStore, EndToEndKeyWorkerStore): def get_device_stream_token(self) -> int: return self._device_list_id_gen.get_current_token() + def get_device_stream_id_generator(self) -> MultiWriterIdGenerator: + return self._device_list_id_gen + async def count_devices_by_users( self, user_ids: Optional[Collection[str]] = None ) -> int: |