mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-21 17:15:38 +03:00
Look for bump stamp in the room timeline
This allows us to skip checking the database a lot of the time.
This commit is contained in:
parent
5389374ef8
commit
a3c49565ff
1 changed files with 24 additions and 12 deletions
|
@ -1045,24 +1045,36 @@ class SlidingSyncHandler:
|
||||||
|
|
||||||
# Figure out the last bump event in the room if we're in the room.
|
# Figure out the last bump event in the room if we're in the room.
|
||||||
if room_membership_for_user_at_to_token.membership == Membership.JOIN:
|
if room_membership_for_user_at_to_token.membership == Membership.JOIN:
|
||||||
last_bump_event_result = (
|
new_bump_stamp: Optional[int] = None
|
||||||
await self.store.get_last_event_pos_in_room_before_stream_ordering(
|
|
||||||
room_id,
|
# First check the timeline events we're returning to see if one of
|
||||||
to_token.room_key,
|
# those matches. We iterate backwards and take the stream ordering
|
||||||
event_types=SLIDING_SYNC_DEFAULT_BUMP_EVENT_TYPES,
|
# of the first event that matches the bump event types.
|
||||||
|
for timeline_event in reversed(timeline_events):
|
||||||
|
if timeline_event.type in SLIDING_SYNC_DEFAULT_BUMP_EVENT_TYPES:
|
||||||
|
new_bump_stamp = timeline_event.internal_metadata.stream_ordering
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
# If not then we query the DB for it.
|
||||||
|
last_bump_event_result = (
|
||||||
|
await self.store.get_last_event_pos_in_room_before_stream_ordering(
|
||||||
|
room_id,
|
||||||
|
to_token.room_key,
|
||||||
|
event_types=SLIDING_SYNC_DEFAULT_BUMP_EVENT_TYPES,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
if last_bump_event_result is not None:
|
||||||
|
_, new_bump_event_pos = last_bump_event_result
|
||||||
# But if we found a bump event, use that instead
|
new_bump_stamp = new_bump_event_pos.stream
|
||||||
if last_bump_event_result is not None:
|
|
||||||
_, new_bump_event_pos = last_bump_event_result
|
|
||||||
|
|
||||||
|
# If we found a bump event, use that instead
|
||||||
|
if new_bump_stamp is not None:
|
||||||
# If we've just joined a remote room, then the last bump event may
|
# If we've just joined a remote room, then the last bump event may
|
||||||
# have been backfilled (and so have a negative stream ordering).
|
# have been backfilled (and so have a negative stream ordering).
|
||||||
# These negative stream orderings can't sensibly be compared, so
|
# These negative stream orderings can't sensibly be compared, so
|
||||||
# instead we use the membership event position.
|
# instead we use the membership event position.
|
||||||
if new_bump_event_pos.stream > 0:
|
if new_bump_stamp > 0:
|
||||||
bump_stamp = new_bump_event_pos.stream
|
bump_stamp = new_bump_stamp
|
||||||
|
|
||||||
unstable_expanded_timeline = False
|
unstable_expanded_timeline = False
|
||||||
prev_room_sync_config = previous_connection_state.room_configs.get(room_id)
|
prev_room_sync_config = previous_connection_state.room_configs.get(room_id)
|
||||||
|
|
Loading…
Reference in a new issue