forked from MirrorHub/synapse
Handle the fact we might be missing auth events
This commit is contained in:
parent
e552b78d50
commit
02410e9239
1 changed files with 20 additions and 16 deletions
|
@ -264,6 +264,7 @@ class FederationHandler(BaseHandler):
|
||||||
event_id=e_id
|
event_id=e_id
|
||||||
)
|
)
|
||||||
auth_events.update({a.event_id: a for a in auth})
|
auth_events.update({a.event_id: a for a in auth})
|
||||||
|
auth_events.update({s.event_id: s for s in state})
|
||||||
state_events.update({s.event_id: s for s in state})
|
state_events.update({s.event_id: s for s in state})
|
||||||
events_to_state[e_id] = state
|
events_to_state[e_id] = state
|
||||||
|
|
||||||
|
@ -271,6 +272,25 @@ class FederationHandler(BaseHandler):
|
||||||
set(auth_events.keys()) | set(state_events.keys())
|
set(auth_events.keys()) | set(state_events.keys())
|
||||||
)
|
)
|
||||||
|
|
||||||
|
all_events = events + state_events.values() + auth_events.values()
|
||||||
|
required_auth = set(
|
||||||
|
a_id for event in all_events for a_id, _ in event.auth_events
|
||||||
|
)
|
||||||
|
|
||||||
|
missing_auth = required_auth - set(auth_events)
|
||||||
|
results = yield defer.gatherResults(
|
||||||
|
[
|
||||||
|
self.replication_layer.get_pdu(
|
||||||
|
[dest],
|
||||||
|
event_id,
|
||||||
|
outlier=True,
|
||||||
|
)
|
||||||
|
for event_id in missing_auth
|
||||||
|
],
|
||||||
|
consumeErrors=True
|
||||||
|
).addErrback(unwrapFirstError)
|
||||||
|
auth_events.update({a.event_id: a for a in results})
|
||||||
|
|
||||||
yield defer.gatherResults(
|
yield defer.gatherResults(
|
||||||
[
|
[
|
||||||
self._handle_new_event(
|
self._handle_new_event(
|
||||||
|
@ -287,22 +307,6 @@ class FederationHandler(BaseHandler):
|
||||||
consumeErrors=True,
|
consumeErrors=True,
|
||||||
).addErrback(unwrapFirstError)
|
).addErrback(unwrapFirstError)
|
||||||
|
|
||||||
yield defer.gatherResults(
|
|
||||||
[
|
|
||||||
self._handle_new_event(
|
|
||||||
dest, s,
|
|
||||||
auth_events={
|
|
||||||
(auth_events[a_id].type, auth_events[a_id].state_key):
|
|
||||||
auth_events[a_id]
|
|
||||||
for a_id, _ in s.auth_events
|
|
||||||
},
|
|
||||||
)
|
|
||||||
for s in state_events.values()
|
|
||||||
if s.event_id not in seen_events
|
|
||||||
],
|
|
||||||
consumeErrors=True,
|
|
||||||
).addErrback(unwrapFirstError)
|
|
||||||
|
|
||||||
yield defer.gatherResults(
|
yield defer.gatherResults(
|
||||||
[
|
[
|
||||||
self._handle_new_event(
|
self._handle_new_event(
|
||||||
|
|
Loading…
Reference in a new issue