diff options
author | Neil Johnson <neil@fragile.org.uk> | 2018-04-09 17:21:34 +0100 |
---|---|---|
committer | Neil Johnson <neil@fragile.org.uk> | 2018-04-09 17:21:34 +0100 |
commit | 5e785d4d5b4137dfa596fde99c80ff94faff0a71 (patch) | |
tree | daa6637c3c7db3b8f0fe1957f7719ffabb04e026 /synapse/state.py | |
parent | Merge branch 'release-v0.27.0' of https://github.com/matrix-org/synapse into ... (diff) | |
parent | Revert "Merge pull request #3066 from matrix-org/rav/remove_redundant_metrics" (diff) | |
download | synapse-5e785d4d5b4137dfa596fde99c80ff94faff0a71.tar.xz |
Merge branch 'develop' of https://github.com/matrix-org/synapse into release-v0.27.0
Diffstat (limited to 'synapse/state.py')
-rw-r--r-- | synapse/state.py | 55 |
1 files changed, 28 insertions, 27 deletions
diff --git a/synapse/state.py b/synapse/state.py index a7f20350f1..26093c8434 100644 --- a/synapse/state.py +++ b/synapse/state.py @@ -483,33 +483,34 @@ class StateResolutionHandler(object): key: e_ids.pop() for key, e_ids in state.iteritems() } - # if the new state matches any of the input state groups, we can - # use that state group again. Otherwise we will generate a state_id - # which will be used as a cache key for future resolutions, but - # not get persisted. - state_group = None - new_state_event_ids = frozenset(new_state.itervalues()) - for sg, events in state_groups_ids.iteritems(): - if new_state_event_ids == frozenset(e_id for e_id in events): - state_group = sg - break - - # TODO: We want to create a state group for this set of events, to - # increase cache hits, but we need to make sure that it doesn't - # end up as a prev_group without being added to the database - - prev_group = None - delta_ids = None - for old_group, old_ids in state_groups_ids.iteritems(): - if not set(new_state) - set(old_ids): - n_delta_ids = { - k: v - for k, v in new_state.iteritems() - if old_ids.get(k) != v - } - if not delta_ids or len(n_delta_ids) < len(delta_ids): - prev_group = old_group - delta_ids = n_delta_ids + with Measure(self.clock, "state.create_group_ids"): + # if the new state matches any of the input state groups, we can + # use that state group again. Otherwise we will generate a state_id + # which will be used as a cache key for future resolutions, but + # not get persisted. + state_group = None + new_state_event_ids = frozenset(new_state.itervalues()) + for sg, events in state_groups_ids.iteritems(): + if new_state_event_ids == frozenset(e_id for e_id in events): + state_group = sg + break + + # TODO: We want to create a state group for this set of events, to + # increase cache hits, but we need to make sure that it doesn't + # end up as a prev_group without being added to the database + + prev_group = None + delta_ids = None + for old_group, old_ids in state_groups_ids.iteritems(): + if not set(new_state) - set(old_ids): + n_delta_ids = { + k: v + for k, v in new_state.iteritems() + if old_ids.get(k) != v + } + if not delta_ids or len(n_delta_ids) < len(delta_ids): + prev_group = old_group + delta_ids = n_delta_ids cache = _StateCacheEntry( state=new_state, |