Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Improve backfill robustness by trying more servers. (#13890)
Browse files Browse the repository at this point in the history
Co-authored-by: Eric Eastwood <[email protected]>
  • Loading branch information
reivilibre and MadLittleMods authored Sep 29, 2022
1 parent 5f659d4 commit 73ecff7
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
1 change: 1 addition & 0 deletions changelog.d/13890.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Improve backfill robustness by trying more servers when we get a `4xx` error back.
33 changes: 31 additions & 2 deletions synapse/handlers/federation.py
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,15 @@ async def _maybe_backfill_inner(

async def try_backfill(domains: Collection[str]) -> bool:
# TODO: Should we try multiple of these at a time?

# Number of contacted remote homeservers that have denied our backfill
# request with a 4xx code.
denied_count = 0

# Maximum number of contacted remote homeservers that can deny our
# backfill request with 4xx codes before we give up.
max_denied_count = 5

for dom in domains:
# We don't want to ask our own server for information we don't have
if dom == self.server_name:
Expand All @@ -435,13 +444,33 @@ async def try_backfill(domains: Collection[str]) -> bool:
continue
except HttpResponseException as e:
if 400 <= e.code < 500:
raise e.to_synapse_error()
logger.warning(
"Backfill denied from %s because %s [%d/%d]",
dom,
e,
denied_count,
max_denied_count,
)
denied_count += 1
if denied_count >= max_denied_count:
return False
continue

logger.info("Failed to backfill from %s because %s", dom, e)
continue
except CodeMessageException as e:
if 400 <= e.code < 500:
raise
logger.warning(
"Backfill denied from %s because %s [%d/%d]",
dom,
e,
denied_count,
max_denied_count,
)
denied_count += 1
if denied_count >= max_denied_count:
return False
continue

logger.info("Failed to backfill from %s because %s", dom, e)
continue
Expand Down

0 comments on commit 73ecff7

Please sign in to comment.