ignore rogue events from rooms we have left
stops explosions of event search when a confused server sends us events for a room we've actually left
This commit is contained in:
parent
90d70af269
commit
1b44b67a7f
|
@ -125,6 +125,23 @@ class FederationHandler(BaseHandler):
|
||||||
self.room_queues[pdu.room_id].append((pdu, origin))
|
self.room_queues[pdu.room_id].append((pdu, origin))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Otherwise we're not joining the room, and so if we don't think we're
|
||||||
|
# in the room, ditch the packet entirely.
|
||||||
|
#
|
||||||
|
# This stops a chain reaction of requesting missing events when we receive
|
||||||
|
# a rogue event over federation for a room we are no longer participating in,
|
||||||
|
# which empirically can take 20 minutes and acquire the linearise lock
|
||||||
|
# for receiving PDUs for that room for the whole duration - e.g.
|
||||||
|
# https://matrix.org/~matthew/train-wreck.log
|
||||||
|
is_in_room = yield self.auth.check_host_in_room(
|
||||||
|
pdu.room_id,
|
||||||
|
self.server_name
|
||||||
|
)
|
||||||
|
if not is_in_room:
|
||||||
|
logger.info("Ignoring PDU %s for room %s from %s as not in room!",
|
||||||
|
pdu.event_id, pdu.room_id, origin)
|
||||||
|
return
|
||||||
|
|
||||||
state = None
|
state = None
|
||||||
|
|
||||||
auth_chain = []
|
auth_chain = []
|
||||||
|
|
Loading…
Reference in New Issue