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 /synapse | |
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.
Diffstat (limited to 'synapse')
-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 |