mirror of
https://mau.dev/maunium/synapse.git
synced 2024-11-17 23:42:33 +01:00
Don't process events we've already processed. Remember to process state events
This commit is contained in:
parent
4bbfbf898e
commit
3f04a08a0c
1 changed files with 22 additions and 0 deletions
|
@ -250,6 +250,7 @@ class FederationHandler(BaseHandler):
|
||||||
# For each edge get the current state.
|
# For each edge get the current state.
|
||||||
|
|
||||||
auth_events = {}
|
auth_events = {}
|
||||||
|
state_events = {}
|
||||||
events_to_state = {}
|
events_to_state = {}
|
||||||
for e_id in edges:
|
for e_id in edges:
|
||||||
state, auth = yield self.replication_layer.get_state_for_room(
|
state, auth = yield self.replication_layer.get_state_for_room(
|
||||||
|
@ -258,8 +259,13 @@ 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})
|
||||||
|
state_events.update({s.event_id: s for s in state})
|
||||||
events_to_state[e_id] = state
|
events_to_state[e_id] = state
|
||||||
|
|
||||||
|
seen_events = yield self.store.have_events(
|
||||||
|
set(auth_events.keys()) | set(state_events.keys())
|
||||||
|
)
|
||||||
|
|
||||||
yield defer.gatherResults(
|
yield defer.gatherResults(
|
||||||
[
|
[
|
||||||
self._handle_new_event(
|
self._handle_new_event(
|
||||||
|
@ -270,6 +276,22 @@ class FederationHandler(BaseHandler):
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
for a in auth_events.values()
|
for a in auth_events.values()
|
||||||
|
if a.event_id not in seen_events
|
||||||
|
],
|
||||||
|
consumeErrors=True,
|
||||||
|
).addErrback(unwrapFirstError)
|
||||||
|
|
||||||
|
yield defer.gatherResults(
|
||||||
|
[
|
||||||
|
self._handle_new_event(
|
||||||
|
dest, s,
|
||||||
|
auth_events={
|
||||||
|
(e.type, e.state_key): e for e in auth_events
|
||||||
|
if e.event_id in [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,
|
consumeErrors=True,
|
||||||
).addErrback(unwrapFirstError)
|
).addErrback(unwrapFirstError)
|
||||||
|
|
Loading…
Reference in a new issue