summary refs log tree commit diff
path: root/synapse/config/federation.py
diff options
context:
space:
mode:
authorMathieu Velten <mathieuv@matrix.org>2023-08-03 20:36:55 +0200
committerGitHub <noreply@github.com>2023-08-03 14:36:55 -0400
commitf0a860908ba0309c89c9dba452d99b4f9c6928f7 (patch)
tree0246657c2956d574bbd57dcaae6965f41f9ac3de /synapse/config/federation.py
parentAllow modules to check whether the current worker is configured to run backgr... (diff)
downloadsynapse-f0a860908ba0309c89c9dba452d99b4f9c6928f7.tar.xz
Allow config of the backoff algorithm for the federation client. (#15754)
Adds three new configuration variables:

* destination_min_retry_interval is identical to before (10mn).
* destination_retry_multiplier is now 2 instead of 5, the maximum value will
  be reached slower.
* destination_max_retry_interval is one day instead of (essentially) infinity.

Capping this will cause destinations to continue to be retried sometimes instead
of being lost forever. The previous value was 2 ^ 62 milliseconds.
Diffstat (limited to 'synapse/config/federation.py')
-rw-r--r--synapse/config/federation.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/synapse/config/federation.py b/synapse/config/federation.py
index 0e1cb8b6e3..97636039b8 100644
--- a/synapse/config/federation.py
+++ b/synapse/config/federation.py
@@ -65,5 +65,23 @@ class FederationConfig(Config):
         self.max_long_retries = federation_config.get("max_long_retries", 10)
         self.max_short_retries = federation_config.get("max_short_retries", 3)
 
+        # Allow for the configuration of the backoff algorithm used
+        # when trying to reach an unavailable destination.
+        # Unlike previous configuration those values applies across
+        # multiple requests and the state of the backoff is stored on DB.
+        self.destination_min_retry_interval_ms = Config.parse_duration(
+            federation_config.get("destination_min_retry_interval", "10m")
+        )
+        self.destination_retry_multiplier = federation_config.get(
+            "destination_retry_multiplier", 2
+        )
+        self.destination_max_retry_interval_ms = min(
+            Config.parse_duration(
+                federation_config.get("destination_max_retry_interval", "7d")
+            ),
+            # Set a hard-limit to not overflow the database column.
+            2**62,
+        )
+
 
 _METRICS_FOR_DOMAINS_SCHEMA = {"type": "array", "items": {"type": "string"}}