Don't fetch state from the database unless needed

This commit is contained in:
Erik Johnston 2018-07-24 13:40:42 +01:00
parent a79410e7b8
commit 811ac73a42

View file

@ -631,6 +631,24 @@ class EventsStore(EventsWorkerStore):
if old_state_groups == new_state_groups: if old_state_groups == new_state_groups:
defer.returnValue((None, None)) defer.returnValue((None, None))
if len(new_state_groups) == 1:
# If there is only one state group, then we know what the current
# state is.
if len(old_state_groups) == 1:
new_state_group = next(iter(new_state_groups))
old_state_group = next(iter(old_state_groups))
delta_ids = state_group_deltas.get(
(old_state_group, new_state_group,), None
)
if delta_ids is not None:
# We have a delta from the existing to new current state,
# so lets just return that. If we happen to already have
# the current state in memory then lets also return that,
# but it doesn't matter if we don't.
new_state = state_groups_map.get(new_state_group)
defer.returnValue((new_state, delta_ids))
# Now that we have calculated new_state_groups we need to get # Now that we have calculated new_state_groups we need to get
# their state IDs so we can resolve to a single state set. # their state IDs so we can resolve to a single state set.
missing_state = new_state_groups - set(state_groups_map) missing_state = new_state_groups - set(state_groups_map)
@ -639,19 +657,7 @@ class EventsStore(EventsWorkerStore):
state_groups_map.update(group_to_state) state_groups_map.update(group_to_state)
if len(new_state_groups) == 1: if len(new_state_groups) == 1:
# If there is only one state group, then we know what the current defer.returnValue((state_groups_map[new_state_groups.pop()], None))
# state is.
new_state_group = new_state_groups.pop()
delta_ids = None
if len(old_state_groups) == 1:
old_state_group = old_state_groups.pop()
delta_ids = state_group_deltas.get(
(old_state_group, new_state_group,), None
)
defer.returnValue((state_groups_map[new_state_group], delta_ids))
# Ok, we need to defer to the state handler to resolve our state sets. # Ok, we need to defer to the state handler to resolve our state sets.