Clean up types for PaginationConfig (#8250)

This removes `SourcePaginationConfig` and `get_pagination_rows`. The reasoning behind this is that these generic classes/functions erased the types of the IDs it used (i.e. instead of passing around `StreamToken` it'd pass in e.g. `token.room_key`, which don't have uniform types).
This commit is contained in:
Erik Johnston 2020-09-08 15:00:17 +01:00 committed by GitHub
parent 703e2b8a96
commit 0f545e6b96
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 52 additions and 86 deletions

View file

@ -335,20 +335,16 @@ class PaginationHandler:
user_id = requester.user.to_string()
if pagin_config.from_token:
room_token = pagin_config.from_token.room_key
from_token = pagin_config.from_token
else:
pagin_config.from_token = (
self.hs.get_event_sources().get_current_token_for_pagination()
)
room_token = pagin_config.from_token.room_key
from_token = self.hs.get_event_sources().get_current_token_for_pagination()
room_token = RoomStreamToken.parse(room_token)
if pagin_config.limit is None:
# This shouldn't happen as we've set a default limit before this
# gets called.
raise Exception("limit not set")
pagin_config.from_token = pagin_config.from_token.copy_and_replace(
"room_key", str(room_token)
)
source_config = pagin_config.get_source_config("room")
room_token = RoomStreamToken.parse(from_token.room_key)
with await self.pagination_lock.read(room_id):
(
@ -358,7 +354,7 @@ class PaginationHandler:
room_id, user_id, allow_departed_users=True
)
if source_config.direction == "b":
if pagin_config.direction == "b":
# if we're going backwards, we might need to backfill. This
# requires that we have a topo token.
if room_token.topological:
@ -381,22 +377,28 @@ class PaginationHandler:
member_event_id
)
if RoomStreamToken.parse(leave_token).topological < max_topo:
source_config.from_key = str(leave_token)
from_token = from_token.copy_and_replace(
"room_key", leave_token
)
await self.hs.get_handlers().federation_handler.maybe_backfill(
room_id, max_topo
)
to_room_key = None
if pagin_config.to_token:
to_room_key = pagin_config.to_token.room_key
events, next_key = await self.store.paginate_room_events(
room_id=room_id,
from_key=source_config.from_key,
to_key=source_config.to_key,
direction=source_config.direction,
limit=source_config.limit,
from_key=from_token.room_key,
to_key=to_room_key,
direction=pagin_config.direction,
limit=pagin_config.limit,
event_filter=event_filter,
)
next_token = pagin_config.from_token.copy_and_replace("room_key", next_key)
next_token = from_token.copy_and_replace("room_key", next_key)
if events:
if event_filter:
@ -409,7 +411,7 @@ class PaginationHandler:
if not events:
return {
"chunk": [],
"start": pagin_config.from_token.to_string(),
"start": from_token.to_string(),
"end": next_token.to_string(),
}
@ -438,7 +440,7 @@ class PaginationHandler:
events, time_now, as_client_event=as_client_event
)
),
"start": pagin_config.from_token.to_string(),
"start": from_token.to_string(),
"end": next_token.to_string(),
}