forked from MirrorHub/synapse
Adjust _get_rooms_changed comments (#11550)
C.f. https://github.com/matrix-org/synapse/pull/11494#pullrequestreview-827780886
This commit is contained in:
parent
f0562183e7
commit
fd2dadb815
2 changed files with 30 additions and 22 deletions
1
changelog.d/11550.misc
Normal file
1
changelog.d/11550.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Fix an inaccurate and misleading comment in the `/sync` code.
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in a new issue