Try to better explain why

See https://github.com/element-hq/synapse/pull/17293#discussion_r1633904606
This commit is contained in:
Eric Eastwood 2024-06-11 20:48:02 -05:00
parent 431b31e0f2
commit d7f40aedf7

View file

@ -914,11 +914,17 @@ class StreamWorkerStore(EventsWorkerStore, SQLBaseStore):
def get_last_event_in_room_before_stream_ordering_txn( def get_last_event_in_room_before_stream_ordering_txn(
txn: LoggingTransaction, txn: LoggingTransaction,
) -> Optional[str]: ) -> Optional[str]:
# We need to handle the fact that the stream tokens can be vector # We're looking for the closest event at or before the token. We need to
# clocks. We do this by getting all rows between the minimum and # handle the fact that the stream token can be a vector clock (with an
# maximum stream ordering in the token, plus one row less than the # `instance_map`) and events can be persisted on different instances
# minimum stream ordering. We then filter the results against the # (sharded event persisters). The first subquery handles the events that
# token and return the first row that matches. # would be within the vector clock and gets all rows between the minimum and
# maximum stream ordering in the token which need to be filtered against the
# `instance_map`. The second subquery handles the "before" case and finds a
# row before the token. We then filter out any results past the token's
# vector clock and return the first row that matches.
min_stream = end_token.stream
max_stream = end_token.get_max_stream_pos()
# We use `union all` because we don't need any of the deduplication logic # We use `union all` because we don't need any of the deduplication logic
# (`union` is really a union + distinct). `UNION ALL`` does preserve the # (`union` is really a union + distinct). `UNION ALL`` does preserve the
@ -956,10 +962,10 @@ class StreamWorkerStore(EventsWorkerStore, SQLBaseStore):
sql, sql,
( (
room_id, room_id,
end_token.stream, min_stream,
end_token.get_max_stream_pos(), max_stream,
room_id, room_id,
end_token.stream, min_stream,
), ),
) )