Adjust _get_rooms_changed comments (#11550)

C.f. https://github.com/matrix-org/synapse/pull/11494#pullrequestreview-827780886
This commit is contained in:
David Robertson 2021-12-10 19:19:48 +00:00 committed by GitHub
parent f0562183e7
commit fd2dadb815
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 22 deletions

1
changelog.d/11550.misc Normal file
View file

@ -0,0 +1 @@
Fix an inaccurate and misleading comment in the `/sync` code.

View file

@ -1662,20 +1662,20 @@ class SyncHandler:
) -> _RoomChanges: ) -> _RoomChanges:
"""Determine the changes in rooms to report to the user. """Determine the changes in rooms to report to the user.
Ideally, we want to report all events whose stream ordering `s` lies in the This function is a first pass at generating the rooms part of the sync response.
range `since_token < s <= now_token`, where the two tokens are read from the It determines which rooms have changed during the sync period, and categorises
sync_result_builder. them into four buckets: "knock", "invite", "join" and "leave".
If there are too many events in that range to report, things get complicated. 1. Finds all membership changes for the user in the sync period (from
In this situation we return a truncated list of the most recent events, and `since_token` up to `now_token`).
indicate in the response that there is a "gap" of omitted events. Additionally: 2. Uses those to place the room in one of the four categories above.
3. Builds a `_RoomChanges` struct to record this, and return that struct.
- we include a "state_delta", to describe the changes in state over the gap, For rooms classified as "knock", "invite" or "leave", we just need to report
- we include all membership events applying to the user making the request, a single membership event in the eventual /sync response. For "join" we need
even those in the gap. to fetch additional non-membership events, e.g. messages in the room. That is
more complicated, so instead we report an intermediary `RoomSyncResultBuilder`
See the spec for the rationale: struct, and leave the additional work to `_generate_room_entry`.
https://spec.matrix.org/v1.1/client-server-api/#syncing
The sync_result_builder is not modified by this function. The sync_result_builder is not modified by this function.
""" """
@ -1686,16 +1686,6 @@ class SyncHandler:
assert since_token assert since_token
# The spec
# https://spec.matrix.org/v1.1/client-server-api/#get_matrixclientv3sync
# notes that membership events need special consideration:
#
# > When a sync is limited, the server MUST return membership events for events
# > in the gap (between since and the start of the returned timeline), regardless
# > as to whether or not they are redundant.
#
# We fetch such events here, but we only seem to use them for categorising rooms
# as newly joined, newly left, invited or knocked.
# TODO: we've already called this function and ran this query in # TODO: we've already called this function and ran this query in
# _have_rooms_changed. We could keep the results in memory to avoid a # _have_rooms_changed. We could keep the results in memory to avoid a
# second query, at the cost of more complicated source code. # second query, at the cost of more complicated source code.
@ -2009,6 +1999,23 @@ class SyncHandler:
"""Populates the `joined` and `archived` section of `sync_result_builder` """Populates the `joined` and `archived` section of `sync_result_builder`
based on the `room_builder`. based on the `room_builder`.
Ideally, we want to report all events whose stream ordering `s` lies in the
range `since_token < s <= now_token`, where the two tokens are read from the
sync_result_builder.
If there are too many events in that range to report, things get complicated.
In this situation we return a truncated list of the most recent events, and
indicate in the response that there is a "gap" of omitted events. Lots of this
is handled in `_load_filtered_recents`, but some of is handled in this method.
Additionally:
- we include a "state_delta", to describe the changes in state over the gap,
- we include all membership events applying to the user making the request,
even those in the gap.
See the spec for the rationale:
https://spec.matrix.org/v1.1/client-server-api/#syncing
Args: Args:
sync_result_builder sync_result_builder
ignored_users: Set of users ignored by user. ignored_users: Set of users ignored by user.