mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-08-07 10:02:15 -04:00
Faster joins: persist to database (#12012)
When we get a partial_state response from send_join, store information in the database about it: * store a record about the room as a whole having partial state, and stash the list of member servers too. * flag the join event itself as having partial state * also, for any new events whose prev-events are partial-stated, note that they will *also* be partial-stated. We don't yet make any attempt to interpret this data, so API calls (and a bunch of other things) are just going to get incorrect data.
This commit is contained in:
parent
4ccc2d09aa
commit
e2e1d90a5e
12 changed files with 297 additions and 32 deletions
|
@ -397,6 +397,7 @@ class FederationEventHandler:
|
|||
state: List[EventBase],
|
||||
event: EventBase,
|
||||
room_version: RoomVersion,
|
||||
partial_state: bool,
|
||||
) -> int:
|
||||
"""Persists the events returned by a send_join
|
||||
|
||||
|
@ -412,6 +413,7 @@ class FederationEventHandler:
|
|||
event
|
||||
room_version: The room version we expect this room to have, and
|
||||
will raise if it doesn't match the version in the create event.
|
||||
partial_state: True if the state omits non-critical membership events
|
||||
|
||||
Returns:
|
||||
The stream ID after which all events have been persisted.
|
||||
|
@ -453,10 +455,14 @@ class FederationEventHandler:
|
|||
)
|
||||
|
||||
# and now persist the join event itself.
|
||||
logger.info("Peristing join-via-remote %s", event)
|
||||
logger.info(
|
||||
"Peristing join-via-remote %s (partial_state: %s)", event, partial_state
|
||||
)
|
||||
with nested_logging_context(suffix=event.event_id):
|
||||
context = await self._state_handler.compute_event_context(
|
||||
event, old_state=state
|
||||
event,
|
||||
old_state=state,
|
||||
partial_state=partial_state,
|
||||
)
|
||||
|
||||
context = await self._check_event_auth(origin, event, context)
|
||||
|
@ -698,6 +704,8 @@ class FederationEventHandler:
|
|||
|
||||
try:
|
||||
state = await self._resolve_state_at_missing_prevs(origin, event)
|
||||
# TODO(faster_joins): make sure that _resolve_state_at_missing_prevs does
|
||||
# not return partial state
|
||||
await self._process_received_pdu(
|
||||
origin, event, state=state, backfilled=backfilled
|
||||
)
|
||||
|
@ -1791,6 +1799,7 @@ class FederationEventHandler:
|
|||
prev_state_ids=prev_state_ids,
|
||||
prev_group=prev_group,
|
||||
delta_ids=state_updates,
|
||||
partial_state=context.partial_state,
|
||||
)
|
||||
|
||||
async def _run_push_actions_and_persist_event(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue