From 7554d5663e5cc9d7cb151a849d7ecbce7ee92d28 Mon Sep 17 00:00:00 2001 From: Eric Eastwood Date: Fri, 1 May 2026 14:08:31 -0500 Subject: [PATCH 1/3] Prefer close backfill points --- synapse/handlers/federation.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py index 166a02d7c7e..4f74814aea5 100644 --- a/synapse/handlers/federation.py +++ b/synapse/handlers/federation.py @@ -275,11 +275,20 @@ async def _maybe_backfill_inner( ) ] - # we now have a list of potential places to backpaginate from. We prefer to - # start with the most recent (ie, max depth), so let's sort the list. + # we now have a list of potential places to backpaginate from. Figure out which + # ones we should prefer, so let's sort the list. sorted_backfill_points: list[_BackfillPoint] = sorted( backwards_extremities, - key=lambda e: -int(e.depth), + key=lambda e: ( + # Prefer backfill points that are closer to the `current_depth` + # (absolute distance) + abs(current_depth - e.depth), + # For the tie-break, we care about events that are actually in the past + # as they're more likely to reveal history that we can return (something + # absolutely in the past is better than something can potentially extend + # into the past). + 1 if current_depth >= e.depth else 0, + ), ) logger.debug( @@ -300,7 +309,7 @@ async def _maybe_backfill_inner( str(len(sorted_backfill_points)), ) - # If we have no backfill points lower than the `current_depth` then either we + # If we have no backfill points lower than the `nearby_depth` then either we # can a) bail or b) still attempt to backfill. We opt to try backfilling anyway # just in case we do get relevant events. This is good for eventual consistency # sake but we don't need to block the client for something that is just as From c39af7e7168d3470cb6854a77b2059b5afbccbf2 Mon Sep 17 00:00:00 2001 From: Eric Eastwood Date: Fri, 1 May 2026 14:33:50 -0500 Subject: [PATCH 2/3] Fix tie-break order --- synapse/handlers/federation.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py index 4f74814aea5..ba83d4fd268 100644 --- a/synapse/handlers/federation.py +++ b/synapse/handlers/federation.py @@ -287,7 +287,9 @@ async def _maybe_backfill_inner( # as they're more likely to reveal history that we can return (something # absolutely in the past is better than something can potentially extend # into the past). - 1 if current_depth >= e.depth else 0, + # + # This sorts ascending so 0 sorts before 1 + 0 if current_depth >= e.depth else 1, ), ) From 85c86a814c140841cd25149a40a44766f42e9b4e Mon Sep 17 00:00:00 2001 From: Eric Eastwood Date: Fri, 1 May 2026 14:36:53 -0500 Subject: [PATCH 3/3] Add changelog --- changelog.d/19748.misc | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/19748.misc diff --git a/changelog.d/19748.misc b/changelog.d/19748.misc new file mode 100644 index 00000000000..eedd4e92a26 --- /dev/null +++ b/changelog.d/19748.misc @@ -0,0 +1 @@ +Prefer close backfill points (absolute distance).