Resync stale devices in background (#15975)

This is so we don't block responding to federation transaction while we
try and fetch the device lists.
This commit is contained in:
Erik Johnston 2023-07-24 13:43:43 +01:00 committed by GitHub
parent 4a711bf379
commit 654902a758
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 1 deletions

1
changelog.d/15975.bugfix Normal file
View file

@ -0,0 +1 @@
Fix bug where resyncing stale device lists could block responding to federation transactions, and thus delay receiving new data from the remote server.

View file

@ -1124,7 +1124,14 @@ class DeviceListUpdater(DeviceListWorkerUpdater):
)
if resync:
await self.multi_user_device_resync([user_id])
# We mark as stale up front in case we get restarted.
await self.store.mark_remote_users_device_caches_as_stale([user_id])
run_as_background_process(
"_maybe_retry_device_resync",
self.multi_user_device_resync,
[user_id],
False,
)
else:
# Simply update the single device, since we know that is the only
# change (because of the single prev_id matching the current cache)