Skip to content
Snippets Groups Projects
Commit 3f04a08a authored by Erik Johnston's avatar Erik Johnston
Browse files

Don't process events we've already processed. Remember to process state events

parent 4bbfbf89
No related branches found
No related tags found
No related merge requests found
...@@ -250,6 +250,7 @@ class FederationHandler(BaseHandler): ...@@ -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): ...@@ -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): ...@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment