diff --git a/synapse/config/federation.py b/synapse/config/federation.py
index d21f7fd02a..e42fa80638 100644
--- a/synapse/config/federation.py
+++ b/synapse/config/federation.py
@@ -53,9 +53,15 @@ class FederationConfig(Config):
# Allow for the configuration of timeout, max request retries
# and min/max retry delays in the matrix federation client.
- self.client_timeout = federation_config.get("client_timeout", 60)
- self.max_long_retry_delay = federation_config.get("max_long_retry_delay", 60)
- self.max_short_retry_delay = federation_config.get("max_short_retry_delay", 2)
+ self.client_timeout = Config.parse_duration(
+ federation_config.get("client_timeout", "60s")
+ )
+ self.max_long_retry_delay = Config.parse_duration(
+ federation_config.get("max_long_retry_delay", "60s")
+ )
+ self.max_short_retry_delay = Config.parse_duration(
+ federation_config.get("max_short_retry_delay", "2s")
+ )
self.max_long_retries = federation_config.get("max_long_retries", 10)
self.max_short_retries = federation_config.get("max_short_retries", 3)
diff --git a/synapse/http/matrixfederationclient.py b/synapse/http/matrixfederationclient.py
index ed36825b67..1ac3cbca5c 100644
--- a/synapse/http/matrixfederationclient.py
+++ b/synapse/http/matrixfederationclient.py
@@ -404,10 +404,10 @@ class MatrixFederationHttpClient:
self.clock = hs.get_clock()
self._store = hs.get_datastores().main
self.version_string_bytes = hs.version_string.encode("ascii")
- self.default_timeout = hs.config.federation.client_timeout
+ self.default_timeout = hs.config.federation.client_timeout / 1000
- self.max_long_retry_delay = hs.config.federation.max_long_retry_delay
- self.max_short_retry_delay = hs.config.federation.max_short_retry_delay
+ self.max_long_retry_delay = hs.config.federation.max_long_retry_delay / 1000
+ self.max_short_retry_delay = hs.config.federation.max_short_retry_delay / 1000
self.max_long_retries = hs.config.federation.max_long_retries
self.max_short_retries = hs.config.federation.max_short_retries
@@ -538,10 +538,10 @@ class MatrixFederationHttpClient:
logger.exception(f"Invalid destination: {request.destination}.")
raise FederationDeniedError(request.destination)
- if timeout:
- _sec_timeout = timeout / 1000
- else:
- _sec_timeout = self.default_timeout
+ if timeout is None:
+ timeout = int(self.default_timeout)
+
+ _sec_timeout = timeout / 1000
if (
self.hs.config.federation.federation_domain_whitelist is not None
@@ -946,10 +946,9 @@ class MatrixFederationHttpClient:
timeout=timeout,
)
- if timeout is not None:
- _sec_timeout = timeout / 1000
- else:
- _sec_timeout = self.default_timeout
+ if timeout is None:
+ timeout = int(self.default_timeout)
+ _sec_timeout = timeout / 1000
if parser is None:
parser = cast(ByteParser[T], JsonParser())
@@ -1135,10 +1134,9 @@ class MatrixFederationHttpClient:
timeout=timeout,
)
- if timeout is not None:
- _sec_timeout = timeout / 1000
- else:
- _sec_timeout = self.default_timeout
+ if timeout is None:
+ timeout = int(self.default_timeout)
+ _sec_timeout = timeout / 1000
if parser is None:
parser = cast(ByteParser[T], JsonParser())
@@ -1211,10 +1209,9 @@ class MatrixFederationHttpClient:
ignore_backoff=ignore_backoff,
)
- if timeout is not None:
- _sec_timeout = timeout / 1000
- else:
- _sec_timeout = self.default_timeout
+ if timeout is None:
+ timeout = int(self.default_timeout)
+ _sec_timeout = timeout / 1000
body = await _handle_response(
self.reactor, _sec_timeout, request, response, start_ms, parser=JsonParser()
diff --git a/tests/http/test_matrixfederationclient.py b/tests/http/test_matrixfederationclient.py
index 8565f8ac64..9eea7870b8 100644
--- a/tests/http/test_matrixfederationclient.py
+++ b/tests/http/test_matrixfederationclient.py
@@ -644,9 +644,9 @@ class FederationClientTests(HomeserverTestCase):
@override_config(
{
"federation": {
- "client_timeout": 180,
- "max_long_retry_delay": 100,
- "max_short_retry_delay": 7,
+ "client_timeout": "180s",
+ "max_long_retry_delay": "100s",
+ "max_short_retry_delay": "7s",
"max_long_retries": 20,
"max_short_retries": 5,
}
|