diff options
author | Erik Johnston <erikj@jki.re> | 2017-10-10 11:58:32 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-10 11:58:32 +0100 |
commit | 84e27a592da474260b5b41d3803ed35927b4f631 (patch) | |
tree | 3250060e867434b978f2e091668ed4c8b3946019 /synapse/handlers/federation.py | |
parent | Merge pull request #2520 from matrix-org/rav/process_incoming_rooms_in_parallel (diff) | |
parent | Fix up comment (diff) | |
download | synapse-84e27a592da474260b5b41d3803ed35927b4f631.tar.xz |
Merge pull request #2490 from matrix-org/erikj/drop_left_room_events
Ignore incoming events for rooms that we have left
Diffstat (limited to 'synapse/handlers/federation.py')
-rw-r--r-- | synapse/handlers/federation.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py index 63c56a4a32..7711cded01 100644 --- a/synapse/handlers/federation.py +++ b/synapse/handlers/federation.py @@ -122,6 +122,28 @@ class FederationHandler(BaseHandler): self.room_queues[pdu.room_id].append((pdu, origin)) return + # If we're no longer in the room just ditch the event entirely. This + # is probably an old server that has come back and thinks we're still + # in the room (or we've been rejoined to the room by a state reset). + # + # If we were never in the room then maybe our database got vaped and + # we should check if we *are* in fact in the room. If we are then we + # can magically rejoin the room. + is_in_room = yield self.auth.check_host_in_room( + pdu.room_id, + self.server_name + ) + if not is_in_room: + was_in_room = yield self.store.was_host_joined( + pdu.room_id, self.server_name, + ) + if was_in_room: + logger.info( + "Ignoring PDU %s for room %s from %s as we've left the room!", + pdu.event_id, pdu.room_id, origin, + ) + return + state = None auth_chain = [] |