Filter out down hosts when retrying fetching device lists (#16298)
This commit is contained in:
parent
b0e93b63d4
commit
151e4bbc45
|
@ -0,0 +1 @@
|
||||||
|
Don't try refetching device lists for users on remote hosts that are marked as "down".
|
|
@ -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))[
|
||||||
|
|
Loading…
Reference in New Issue