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 b1af992113
commit 901ce62d07

View file

@ -914,11 +914,15 @@ class StreamWorkerStore(EventsWorkerStore, SQLBaseStore):
def get_last_event_in_room_before_stream_ordering_txn(
txn: LoggingTransaction,
) -> Optional[str]:
# We need to handle the fact that the stream tokens can be vector clocks. We
# do this by getting all rows between the minimum and maximum stream
# ordering in the token, plus one row less than the minimum stream ordering
# (TODO: Why?). We then filter the results against the token and return the
# first row that matches.
# We're looking for the closest event at or before the token. We need to
# handle the fact that the stream token can be a vector clock (with an
# `instance_map`) and events can be persisted on different instances
# (sharded event persisters). The first subquery handles the events that
# 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()