Skip to content

Commit

Permalink
Don't try and resync devices for down hosts (element-hq#17273)
Browse files Browse the repository at this point in the history
It's just a waste of time if we won't even query the remote host as its
marked as down.
  • Loading branch information
erikjohnston authored and Mic92 committed Jun 14, 2024
1 parent 0bd7149 commit 7cc608e
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 6 deletions.
1 change: 1 addition & 0 deletions changelog.d/17273.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Don't try and resync devices for remote users whose servers are marked as down.
24 changes: 18 additions & 6 deletions synapse/handlers/e2e_keys.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,10 @@
from synapse.util import json_decoder
from synapse.util.async_helpers import Linearizer, concurrently_execute
from synapse.util.cancellation import cancellable
from synapse.util.retryutils import NotRetryingDestination
from synapse.util.retryutils import (
NotRetryingDestination,
filter_destinations_by_retry_limiter,
)

if TYPE_CHECKING:
from synapse.server import HomeServer
Expand Down Expand Up @@ -268,10 +271,8 @@ async def query_devices(
"%d destinations to query devices for", len(remote_queries_not_in_cache)
)

async def _query(
destination_queries: Tuple[str, Dict[str, Iterable[str]]]
) -> None:
destination, queries = destination_queries
async def _query(destination: str) -> None:
queries = remote_queries_not_in_cache[destination]
return await self._query_devices_for_destination(
results,
cross_signing_keys,
Expand All @@ -281,9 +282,20 @@ async def _query(
timeout,
)

# Only try and fetch keys for destinations that are not marked as
# down.
filtered_destinations = await filter_destinations_by_retry_limiter(
remote_queries_not_in_cache.keys(),
self.clock,
self.store,
# Let's give an arbitrary grace period for those hosts that are
# only recently down
retry_due_within_ms=60 * 1000,
)

await concurrently_execute(
_query,
remote_queries_not_in_cache.items(),
filtered_destinations,
10,
delay_cancellation=True,
)
Expand Down

0 comments on commit 7cc608e

Please sign in to comment.