mirror of
https://github.com/element-hq/synapse.git
synced 2026-05-24 15:15:22 +00:00
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:
@@ -0,0 +1 @@
|
||||
Prefer close backfill points (absolute distance).
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user