Resync remote device list when detected as stale. (#6786)

This commit is contained in:
Erik Johnston 2020-01-30 17:06:38 +00:00 committed by GitHub
parent c3d4ad8afd
commit b660327056
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 28 additions and 7 deletions

View file

@ -57,6 +57,7 @@ from synapse.logging.context import (
run_in_background,
)
from synapse.logging.utils import log_function
from synapse.replication.http.devices import ReplicationUserDevicesResyncRestServlet
from synapse.replication.http.federation import (
ReplicationCleanRoomRestServlet,
ReplicationFederationSendEventsRestServlet,
@ -156,6 +157,13 @@ class FederationHandler(BaseHandler):
hs
)
if hs.config.worker_app:
self._user_device_resync = ReplicationUserDevicesResyncRestServlet.make_client(
hs
)
else:
self._device_list_updater = hs.get_device_handler().device_list_updater
# When joining a room we need to queue any events for that room up
self.room_queues = {}
self._room_pdu_linearizer = Linearizer("fed_room_pdu")
@ -759,8 +767,14 @@ class FederationHandler(BaseHandler):
await self.store.mark_remote_user_device_cache_as_stale(
event.sender
)
# TODO: Poke something to start trying to refetch user's
# keys.
# Immediately attempt a resync in the background
if self.config.worker_app:
return run_in_background(self._user_device_resync, event.sender)
else:
return run_in_background(
self._device_list_updater.user_device_resync, event.sender
)
@log_function
async def backfill(self, dest, room_id, limit, extremities):