summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--changelog.d/5042.bugfix1
-rw-r--r--synapse/handlers/federation.py28
2 files changed, 20 insertions, 9 deletions
diff --git a/changelog.d/5042.bugfix b/changelog.d/5042.bugfix
new file mode 100644
index 0000000000..736b07c790
--- /dev/null
+++ b/changelog.d/5042.bugfix
@@ -0,0 +1 @@
+Fix bug processing incoming events over federation if call to `/get_missing_events` fails.
diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py
index 93e064cda3..cc08e3e027 100644
--- a/synapse/handlers/federation.py
+++ b/synapse/handlers/federation.py
@@ -498,15 +498,25 @@ class FederationHandler(BaseHandler):
         #
         # All that said: Let's try increasing the timout to 60s and see what happens.
 
-        missing_events = yield self.federation_client.get_missing_events(
-            origin,
-            room_id,
-            earliest_events_ids=list(latest),
-            latest_events=[pdu],
-            limit=10,
-            min_depth=min_depth,
-            timeout=60000,
-        )
+        try:
+            missing_events = yield self.federation_client.get_missing_events(
+                origin,
+                room_id,
+                earliest_events_ids=list(latest),
+                latest_events=[pdu],
+                limit=10,
+                min_depth=min_depth,
+                timeout=60000,
+            )
+        except RequestSendFailed as e:
+            # We failed to get the missing events, but since we need to handle
+            # the case of `get_missing_events` not returning the necessary
+            # events anyway, it is safe to simply log the error and continue.
+            logger.warn(
+                "[%s %s]: Failed to get prev_events for %s: %s",
+                room_id, event_id, e,
+            )
+            return
 
         logger.info(
             "[%s %s]: Got %d prev_events: %s",