1 files changed, 18 insertions, 12 deletions
diff --git a/synapse/storage/events.py b/synapse/storage/events.py
index 6d2aae9c4a..eb8bbe13ab 100644
--- a/synapse/storage/events.py
+++ b/synapse/storage/events.py
@@ -631,27 +631,33 @@ class EventsStore(EventsWorkerStore):
if old_state_groups == new_state_groups:
defer.returnValue((None, None))
- # Now that we have calculated new_state_groups we need to get
- # their state IDs so we can resolve to a single state set.
- missing_state = new_state_groups - set(state_groups_map)
- if missing_state:
- group_to_state = yield self._get_state_for_groups(missing_state)
- state_groups_map.update(group_to_state)
-
if len(new_state_groups) == 1:
# If there is only one state group, then we know what the current
# 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()
+ 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))
- defer.returnValue((state_groups_map[new_state_group], delta_ids))
+ # Now that we have calculated new_state_groups we need to get
+ # their state IDs so we can resolve to a single state set.
+ missing_state = new_state_groups - set(state_groups_map)
+ if missing_state:
+ group_to_state = yield self._get_state_for_groups(missing_state)
+ state_groups_map.update(group_to_state)
+
+ if len(new_state_groups) == 1:
+ defer.returnValue((state_groups_map[new_state_groups.pop()], None))
# Ok, we need to defer to the state handler to resolve our state sets.
|