Filter out down hosts when retrying fetching device lists (#16298)

This commit is contained in:
Erik Johnston 2023-09-11 13:11:02 +01:00 committed by GitHub
parent b0e93b63d4
commit 151e4bbc45
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 1 deletions

1
changelog.d/16298.misc Normal file
View File

@ -0,0 +1 @@
Don't try refetching device lists for users on remote hosts that are marked as "down".

View File

@ -58,7 +58,10 @@ from synapse.util.async_helpers import Linearizer
from synapse.util.caches.expiringcache import ExpiringCache from synapse.util.caches.expiringcache import ExpiringCache
from synapse.util.cancellation import cancellable from synapse.util.cancellation import cancellable
from synapse.util.metrics import measure_func from synapse.util.metrics import measure_func
from synapse.util.retryutils import NotRetryingDestination from synapse.util.retryutils import (
NotRetryingDestination,
filter_destinations_by_retry_limiter,
)
if TYPE_CHECKING: if TYPE_CHECKING:
from synapse.server import HomeServer from synapse.server import HomeServer
@ -1269,8 +1272,18 @@ class DeviceListUpdater(DeviceListWorkerUpdater):
self._resync_retry_in_progress = True self._resync_retry_in_progress = True
# Get all of the users that need resyncing. # Get all of the users that need resyncing.
need_resync = await self.store.get_user_ids_requiring_device_list_resync() need_resync = await self.store.get_user_ids_requiring_device_list_resync()
# Filter out users whose host is marked as "down" up front.
hosts = await filter_destinations_by_retry_limiter(
{get_domain_from_id(u) for u in need_resync}, self.clock, self.store
)
hosts = set(hosts)
# Iterate over the set of user IDs. # Iterate over the set of user IDs.
for user_id in need_resync: for user_id in need_resync:
if get_domain_from_id(user_id) not in hosts:
continue
try: try:
# Try to resync the current user's devices list. # Try to resync the current user's devices list.
result = (await self.multi_user_device_resync([user_id], False))[ result = (await self.multi_user_device_resync([user_id], False))[