summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2015-02-16 14:27:40 +0000
committerErik Johnston <erik@matrix.org>2015-02-16 14:27:40 +0000
commit91fc5eef1deb2f756d16f3d5ea20ede8d967f6df (patch)
treeba36c3a6c0dcfae853b01051f296ec2d5fd562f1 /synapse
parentDon't return anything from _handle_new_pdu, since we ignore the return value ... (diff)
downloadsynapse-91fc5eef1deb2f756d16f3d5ea20ede8d967f6df.tar.xz
Mark old events as outliers.
This is to fix the issue where if a remote server sends an event
that references a really "old" event, then the local server will pull
that in and send to all clients.

We decide if an event is old if its depth is less than the minimum depth
of the room.
Diffstat (limited to 'synapse')
-rw-r--r--synapse/federation/federation_server.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/synapse/federation/federation_server.py b/synapse/federation/federation_server.py
index 7ca8d49c54..4391a60c02 100644
--- a/synapse/federation/federation_server.py
+++ b/synapse/federation/federation_server.py
@@ -366,7 +366,13 @@ class FederationServer(FederationBase):
                 pdu.room_id, min_depth
             )
 
-            if min_depth and pdu.depth > min_depth and max_recursion > 0:
+            if min_depth and pdu.depth < min_depth:
+                # This is so that we don't notify the user about this
+                # message, to work around the fact that some events will
+                # reference really really old events we really don't want to
+                # send to the clients.
+                pdu.internal_metadata.outlier = True
+            elif min_depth and pdu.depth > min_depth and max_recursion > 0:
                 for event_id, hashes in pdu.prev_events:
                     if event_id not in have_seen:
                         logger.debug(