diff options
author | Erik Johnston <erik@matrix.org> | 2018-07-23 17:21:40 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2018-07-23 17:21:40 +0100 |
commit | 50c60e5fadbefff6785c17dda9eecf88286dba30 (patch) | |
tree | 98a9728d50defc0a28a4efbcb5b85e65562fe79b | |
parent | Merge pull request #3582 from matrix-org/erikj/fixup_stateless (diff) | |
download | synapse-50c60e5fadbefff6785c17dda9eecf88286dba30.tar.xz |
Only get cached state from context in persist_event
We don't want to bother pulling out the current state from the DB since until we know we have to. Checking the context for state is just an optimisation.
-rw-r--r-- | synapse/events/snapshot.py | 13 | ||||
-rw-r--r-- | synapse/storage/events.py | 4 |
2 files changed, 16 insertions, 1 deletions
diff --git a/synapse/events/snapshot.py b/synapse/events/snapshot.py index a59064b416..c439b53801 100644 --- a/synapse/events/snapshot.py +++ b/synapse/events/snapshot.py @@ -163,6 +163,9 @@ class EventContext(object): context._prev_state_id = input["prev_state_id"] context._event_type = input["event_type"] context._event_state_key = input["event_state_key"] + + context._current_state_ids = None + context._prev_state_ids = None context._fetching_state_deferred = None context.state_group = input["state_group"] @@ -214,6 +217,16 @@ class EventContext(object): defer.returnValue(self._prev_state_ids) + def get_cached_current_state_ids(self): + """Gets the current state IDs if we have them already cached. + + Returns: + dict[(str, str), str]|None: Returns None if state_group + is None, which happens when the associated event is an outlier. + """ + + return self._current_state_ids + @defer.inlineCallbacks def _fill_out_state(self, store): """Called to populate the _current_state_ids and _prev_state_ids diff --git a/synapse/storage/events.py b/synapse/storage/events.py index bf4f3ee92a..dc0b3c2eba 100644 --- a/synapse/storage/events.py +++ b/synapse/storage/events.py @@ -549,7 +549,9 @@ class EventsStore(EventsWorkerStore): if ctx.state_group in state_groups_map: continue - state_groups_map[ctx.state_group] = yield ctx.get_current_state_ids(self) + current_state_ids = ctx.get_cached_current_state_ids() + if current_state_ids is not None: + state_groups_map[ctx.state_group] = current_state_ids # We need to map the event_ids to their state groups. First, let's # check if the event is one we're persisting, in which case we can |