diff options
author | Erik Johnston <erik@matrix.org> | 2018-07-25 09:35:02 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2018-07-25 09:35:02 +0100 |
commit | ec56121b0d099824a1455260e05904f081b6d14a (patch) | |
tree | 2190b4f5d5e1766d058623aa1347c466f5e1b9a3 /synapse | |
parent | Merge pull request #3597 from matrix-org/erikj/did_forget (diff) | |
download | synapse-ec56121b0d099824a1455260e05904f081b6d14a.tar.xz |
Correctly handle outliers during persist events
We incorrectly asserted that all contexts must have a non None state group without consider outliers. This would usually be fine as the assertion would never be hit, as there is a shortcut during persistence if the forward extremities don't change. However, if the outlier is being persisted with non-outlier events, the function would be called and the assertion would be hit. Fixes #3601
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/storage/events.py | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/synapse/storage/events.py b/synapse/storage/events.py index 906a405031..bd05f23b06 100644 --- a/synapse/storage/events.py +++ b/synapse/storage/events.py @@ -575,11 +575,12 @@ class EventsStore(EventsWorkerStore): for ev, ctx in events_context: if ctx.state_group is None: - # I don't think this can happen, but let's double-check - raise Exception( - "Context for new extremity event %s has no state " - "group" % (ev.event_id, ), - ) + # This should only happen for outlier events. + if not event.internal_metadata.is_outlier(): + raise Exception( + "Context for new event %s has no state " + "group" % (ev.event_id, ), + ) if ctx.state_group in state_groups_map: continue @@ -607,7 +608,7 @@ class EventsStore(EventsWorkerStore): for event_id in new_latest_event_ids: # First search in the list of new events we're adding. for ev, ctx in events_context: - if event_id == ev.event_id: + if event_id == ev.event_id and ctx.state_group is not None: event_id_to_state_group[event_id] = ctx.state_group break else: |