Skip to content
Snippets Groups Projects
Unverified Commit 69018acb authored by Richard van der Hoff's avatar Richard van der Hoff Committed by GitHub
Browse files

Clear the resync bit after resyncing device lists (#9867)

Fixes #9866.
parent 294c6750
No related branches found
No related tags found
No related merge requests found
Fix a bug which could cause Synapse to get stuck in a loop of resyncing device lists.
......@@ -925,6 +925,10 @@ class DeviceListUpdater:
else:
cached_devices = await self.store.get_cached_devices_for_user(user_id)
if cached_devices == {d["device_id"]: d for d in devices}:
logging.info(
"Skipping device list resync for %s, as our cache matches already",
user_id,
)
devices = []
ignore_devices = True
......@@ -940,6 +944,9 @@ class DeviceListUpdater:
await self.store.update_remote_device_list_cache(
user_id, devices, stream_id
)
# mark the cache as valid, whether or not we actually processed any device
# list updates.
await self.store.mark_remote_user_device_cache_as_valid(user_id)
device_ids = [device["device_id"] for device in devices]
# Handle cross-signing keys.
......
......@@ -717,7 +717,15 @@ class DeviceWorkerStore(SQLBaseStore):
keyvalues={"user_id": user_id},
values={},
insertion_values={"added_ts": self._clock.time_msec()},
desc="make_remote_user_device_cache_as_stale",
desc="mark_remote_user_device_cache_as_stale",
)
async def mark_remote_user_device_cache_as_valid(self, user_id: str) -> None:
# Remove the database entry that says we need to resync devices, after a resync
await self.db_pool.simple_delete(
table="device_lists_remote_resync",
keyvalues={"user_id": user_id},
desc="mark_remote_user_device_cache_as_valid",
)
async def mark_remote_user_device_list_as_unsubscribed(self, user_id: str) -> None:
......@@ -1289,15 +1297,6 @@ class DeviceStore(DeviceWorkerStore, DeviceBackgroundUpdateStore):
lock=False,
)
# If we're replacing the remote user's device list cache presumably
# we've done a full resync, so we remove the entry that says we need
# to resync
self.db_pool.simple_delete_txn(
txn,
table="device_lists_remote_resync",
keyvalues={"user_id": user_id},
)
async def add_device_change_to_streams(
self, user_id: str, device_ids: Collection[str], hosts: List[str]
):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment