Skip to content
Snippets Groups Projects
Commit a3c49565 authored by Erik Johnston's avatar Erik Johnston
Browse files

Look for bump stamp in the room timeline

This allows us to skip checking the database a lot of the time.
parent 5389374e
Branches
Tags
No related merge requests found
...@@ -1045,24 +1045,36 @@ class SlidingSyncHandler: ...@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment