summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2016-08-05 10:43:47 +0100
committerErik Johnston <erik@matrix.org>2016-08-05 10:43:47 +0100
commitfccadb7719f872ecdabd6ebfb299156eca208454 (patch)
treeefa4a47c8a0036679c365237bc11d58eab2f7ea0 /synapse
parentDelete more tables (diff)
downloadsynapse-fccadb7719f872ecdabd6ebfb299156eca208454.tar.xz
Check if we already have the events returned by /state/
Diffstat (limited to 'synapse')
-rw-r--r--synapse/federation/federation_client.py18
1 files changed, 16 insertions, 2 deletions
diff --git a/synapse/federation/federation_client.py b/synapse/federation/federation_client.py
index 7e1690b0fb..b751d26de1 100644
--- a/synapse/federation/federation_client.py
+++ b/synapse/federation/federation_client.py
@@ -361,12 +361,26 @@ class FederationClient(FederationBase):
             for p in result.get("auth_chain", [])
         ]
 
+        seen_events = yield self.store.get_events([
+            ev.event_id for ev in itertools.chain(pdus, auth_chain)
+        ])
+
         signed_pdus = yield self._check_sigs_and_hash_and_fetch(
-            destination, pdus, outlier=True
+            destination,
+            [p for p in pdus if p.event_id not in seen_events],
+            outlier=True
+        )
+        signed_pdus.extend(
+            seen_events[p.event_id] for p in pdus if p.event_id in seen_events
         )
 
         signed_auth = yield self._check_sigs_and_hash_and_fetch(
-            destination, auth_chain, outlier=True
+            destination,
+            [p for p in pdus if p.event_id not in auth_chain],
+            outlier=True
+        )
+        signed_auth.extend(
+            seen_events[p.event_id] for p in auth_chain if p.event_id in seen_events
         )
 
         signed_auth.sort(key=lambda e: e.depth)