From 9cd18cc5886a5f44625c1c4730f146ec189b833e Mon Sep 17 00:00:00 2001
From: Erik Johnston <erik@matrix.org>
Date: Tue, 9 Mar 2021 13:15:12 +0000
Subject: [PATCH] Retry 5xx errors in federation client (#9567)

Fixes #8915
---
 changelog.d/9567.bugfix                | 1 +
 synapse/http/matrixfederationclient.py | 7 ++++---
 2 files changed, 5 insertions(+), 3 deletions(-)
 create mode 100644 changelog.d/9567.bugfix

diff --git a/changelog.d/9567.bugfix b/changelog.d/9567.bugfix
new file mode 100644
index 0000000000..e7322c2b5e
--- /dev/null
+++ b/changelog.d/9567.bugfix
@@ -0,0 +1 @@
+Fix bug where federation requests were not correctly retried on 5xx responses.
diff --git a/synapse/http/matrixfederationclient.py b/synapse/http/matrixfederationclient.py
index da6866addf..5f01ebd3d4 100644
--- a/synapse/http/matrixfederationclient.py
+++ b/synapse/http/matrixfederationclient.py
@@ -534,9 +534,10 @@ class MatrixFederationHttpClient:
                             response.code, response_phrase, body
                         )
 
-                        # Retry if the error is a 429 (Too Many Requests),
-                        # otherwise just raise a standard HttpResponseException
-                        if response.code == 429:
+                        # Retry if the error is a 5xx or a 429 (Too Many
+                        # Requests), otherwise just raise a standard
+                        # `HttpResponseException`
+                        if 500 <= response.code < 600 or response.code == 429:
                             raise RequestSendFailed(exc, can_retry=True) from exc
                         else:
                             raise exc
-- 
GitLab