Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Add some comments
Browse files Browse the repository at this point in the history
  • Loading branch information
richvdh committed Apr 17, 2018
1 parent e585228 commit 72e3c47
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 5 deletions.
24 changes: 22 additions & 2 deletions synapse/federation/federation_server.py
Expand Up @@ -494,13 +494,33 @@ def _transaction_from_pdus(self, pdu_list):
def _handle_received_pdu(self, origin, pdu):
""" Process a PDU received in a federation /send/ transaction.
If the event is invalid, then this method throws a FederationError.
(The error will then be logged and sent back to the sender (which
probably won't do anything with it), and other events in the
transaction will be processed as normal).
It is like that we'll then receive other events which refer to
this rejected_event in their prev_events, etc. When that happens,
we'll attempt to fetch the rejected event again, which will presumably
fail, so those second-generation events will also get rejected.
Eventually, we get to the point where there are more than 10 events
between any new events and the original rejected event. Since we
only try to backfill 10 events deep on received pdu, we then accept the
new event, possibly introducing a discontinuity in the DAG, with new
forward extremities, so normal service is approximately returned,
until we try to backfill across the discontinuity.
Args:
origin (str): server which sent the pdu
pdu (FrozenEvent): received pdu
Returns (Deferred): completes with None
Raises: FederationError if the signatures / hash do not match
"""
Raises: FederationError if the signatures / hash do not match, or
if the event was unacceptable for any other reason (eg, too large,
too many prev_events, couldn't find the prev_events)
"""
# check that it's actually being sent from a valid destination to
# workaround bug #1753 in 0.18.5 and 0.18.6
if origin != get_domain_from_id(pdu.event_id):
Expand Down
15 changes: 12 additions & 3 deletions synapse/handlers/federation.py
Expand Up @@ -542,9 +542,16 @@ def redact_disallowed(event, state):
def backfill(self, dest, room_id, limit, extremities):
""" Trigger a backfill request to `dest` for the given `room_id`
This will attempt to get more events from the remote. This may return
be successfull and still return no events if the other side has no new
events to offer.
This will attempt to get more events from the remote. If the other side
has no new events to offer, this will return an empty list.
As the events are received, we check their signatures, and also do some
sanity-checking on them. If any of the backfilled events are invalid,
this method throws a SynapseError.
TODO: make this more useful to distinguish failures of the remote
server from invalid events (there is probably no point in trying to
re-fetch invalid events from every other HS in the room.)
"""
if dest == self.server_name:
raise SynapseError(400, "Can't backfill from self.")
Expand All @@ -556,6 +563,8 @@ def backfill(self, dest, room_id, limit, extremities):
extremities=extremities,
)

# do some sanity-checking of the received events, before we go and
# do state resolution across 1000 events.
for ev in events:
self._sanity_check_event(ev)

Expand Down

0 comments on commit 72e3c47

Please sign in to comment.