diff options
author | Erik Johnston <erik@matrix.org> | 2022-04-19 15:12:08 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2022-04-21 11:49:51 +0100 |
commit | a917a36936ba68651f931dbb7b6aea60d19db807 (patch) | |
tree | 46756d4467370248ef8496de69e7262f8bff7f6b /synapse/http | |
parent | Add a `AwakenableSleeper` class (diff) | |
download | synapse-a917a36936ba68651f931dbb7b6aea60d19db807.tar.xz |
Immediate retry any requests that have backed off when a server comes back online
Diffstat (limited to 'synapse/http')
-rw-r--r-- | synapse/http/matrixfederationclient.py | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/synapse/http/matrixfederationclient.py b/synapse/http/matrixfederationclient.py index 5097b3ca57..6e2653900a 100644 --- a/synapse/http/matrixfederationclient.py +++ b/synapse/http/matrixfederationclient.py @@ -73,7 +73,7 @@ from synapse.logging.context import make_deferred_yieldable, run_in_background from synapse.logging.opentracing import set_tag, start_active_span, tags from synapse.types import JsonDict from synapse.util import json_decoder -from synapse.util.async_helpers import timeout_deferred +from synapse.util.async_helpers import AwakenableSleeper, timeout_deferred from synapse.util.metrics import Measure if TYPE_CHECKING: @@ -353,6 +353,13 @@ class MatrixFederationHttpClient: self._cooperator = Cooperator(scheduler=schedule) + self._sleeper = AwakenableSleeper(self.reactor) + + def wake_destination(self, destination: str) -> None: + """Called when the remote server may have come back online.""" + + self._sleeper.wake(destination) + async def _send_request_with_optional_trailing_slash( self, request: MatrixFederationRequest, @@ -664,7 +671,9 @@ class MatrixFederationHttpClient: delay, ) - await self.clock.sleep(delay) + # Sleep for the calculated delay, or wake up immediately + # if we get notified that the server is back up. + await self._sleeper.sleep(request.destination, delay * 1000) retries_left -= 1 else: raise |