forked from MirrorHub/synapse
Add some assertions about outliers (#10773)
I think I have finally teased apart the codepaths which handle outliers, and those that handle non-outliers. Let's add some assertions to demonstrate my newfound knowledge.
This commit is contained in:
parent
5724883ac2
commit
aacdce8fc0
2 changed files with 83 additions and 76 deletions
1
changelog.d/10773.misc
Normal file
1
changelog.d/10773.misc
Normal file
|
@ -0,0 +1 @@
|
|||
Clean up some of the federation event authentication code for clarity.
|
|
@ -173,6 +173,9 @@ class FederationEventHandler:
|
|||
pdu: received PDU
|
||||
"""
|
||||
|
||||
# We should never see any outliers here.
|
||||
assert not pdu.internal_metadata.outlier
|
||||
|
||||
room_id = pdu.room_id
|
||||
event_id = pdu.event_id
|
||||
|
||||
|
@ -232,13 +235,7 @@ class FederationEventHandler:
|
|||
)
|
||||
return None
|
||||
|
||||
# Check that the event passes auth based on the state at the event. This is
|
||||
# done for events that are to be added to the timeline (non-outliers).
|
||||
#
|
||||
# Get missing pdus if necessary:
|
||||
# - Fetching any missing prev events to fill in gaps in the graph
|
||||
# - Fetching state if we have a hole in the graph
|
||||
if not pdu.internal_metadata.is_outlier():
|
||||
# Try to fetch any missing prev events to fill in gaps in the graph
|
||||
prevs = set(pdu.prev_event_ids())
|
||||
seen = await self._store.have_events_in_timeline(prevs)
|
||||
missing_prevs = prevs - seen
|
||||
|
@ -885,8 +882,13 @@ class FederationEventHandler:
|
|||
state: Optional[Iterable[EventBase]],
|
||||
backfilled: bool = False,
|
||||
) -> None:
|
||||
"""Called when we have a new pdu. We need to do auth checks and put it
|
||||
through the StateHandler.
|
||||
"""Called when we have a new non-outlier event.
|
||||
|
||||
This is called when we have a new event to add to the room DAG - either directly
|
||||
via a /send request, retrieved via get_missing_events after a /send request, or
|
||||
backfilled after a client request.
|
||||
|
||||
We need to do auth checks and put it through the StateHandler.
|
||||
|
||||
Args:
|
||||
origin: server sending the event
|
||||
|
@ -901,6 +903,7 @@ class FederationEventHandler:
|
|||
notification to clients, and validation of device keys.)
|
||||
"""
|
||||
logger.debug("Processing event: %s", event)
|
||||
assert not event.internal_metadata.outlier
|
||||
|
||||
try:
|
||||
context = await self._state_handler.compute_event_context(
|
||||
|
@ -1263,11 +1266,13 @@ class FederationEventHandler:
|
|||
Possibly incomplete, and possibly including events that are not yet
|
||||
persisted, or authed, or in the right room.
|
||||
|
||||
Only populated where we may not already have persisted these events -
|
||||
for example, when populating outliers.
|
||||
Only populated when populating outliers.
|
||||
|
||||
backfilled: True if the event was backfilled.
|
||||
"""
|
||||
# claimed_auth_event_map should be given iff the event is an outlier
|
||||
assert bool(claimed_auth_event_map) == event.internal_metadata.outlier
|
||||
|
||||
context = await self._check_event_auth(
|
||||
origin,
|
||||
event,
|
||||
|
@ -1306,15 +1311,16 @@ class FederationEventHandler:
|
|||
Possibly incomplete, and possibly including events that are not yet
|
||||
persisted, or authed, or in the right room.
|
||||
|
||||
Only populated where we may not already have persisted these events -
|
||||
for example, when populating outliers, or the state for a backwards
|
||||
extremity.
|
||||
Only populated when populating outliers.
|
||||
|
||||
backfilled: True if the event was backfilled.
|
||||
|
||||
Returns:
|
||||
The updated context object.
|
||||
"""
|
||||
# claimed_auth_event_map should be given iff the event is an outlier
|
||||
assert bool(claimed_auth_event_map) == event.internal_metadata.outlier
|
||||
|
||||
room_version = await self._store.get_room_version_id(event.room_id)
|
||||
room_version_obj = KNOWN_ROOM_VERSIONS[room_version]
|
||||
|
||||
|
|
Loading…
Reference in a new issue