Prefer close backfill points (absolute distance) (#19748)

This isn't fixing any particular issue. It's just a follow-up I thought
about after merging https://github.com/element-hq/synapse/pull/19611
since we're now also dealing with backfill points in the nearby range
ahead of the `current_depth`. And it's possible that the previous sort
could bias to all nearby backfill points ahead of the `current_depth`
that don't extend into the visible window of events we're paginating
through.
This commit is contained in:
Eric Eastwood
2026-05-15 11:49:11 -05:00
committed by GitHub
parent 0c6e0f79e5
commit 19f636244c
2 changed files with 16 additions and 4 deletions
+1
View File
@@ -0,0 +1 @@
Prefer close backfill points (absolute distance).
+15 -4
View File
@@ -275,11 +275,22 @@ class FederationHandler:
)
]
# 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).
#
# This sorts ascending so 0 sorts before 1
0 if current_depth >= e.depth else 1,
),
)
logger.debug(
@@ -300,7 +311,7 @@ class FederationHandler:
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