Refactor resolve_state_groups_for_events to not pull out full state when no state resolution happens. (#12775)

This commit is contained in:
Shay 2022-05-18 10:15:52 -07:00 committed by GitHub
parent 3d8839c30c
commit 19d79b6ebe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 40 additions and 23 deletions

View file

@ -288,7 +288,6 @@ class StateHandler:
#
# first of all, figure out the state before the event
#
if old_state:
# if we're given the state before the event, then we use that
state_ids_before_event: StateMap[str] = {
@ -419,33 +418,37 @@ class StateHandler:
"""
logger.debug("resolve_state_groups event_ids %s", event_ids)
# map from state group id to the state in that state group (where
# 'state' is a map from state key to event id)
# dict[int, dict[(str, str), str]]
state_groups_ids = await self.state_store.get_state_groups_ids(
room_id, event_ids
)
state_groups = await self.state_store.get_state_group_for_events(event_ids)
if len(state_groups_ids) == 0:
return _StateCacheEntry(state={}, state_group=None)
elif len(state_groups_ids) == 1:
name, state_list = list(state_groups_ids.items()).pop()
prev_group, delta_ids = await self.state_store.get_state_group_delta(name)
state_group_ids = state_groups.values()
# check if each event has same state group id, if so there's no state to resolve
state_group_ids_set = set(state_group_ids)
if len(state_group_ids_set) == 1:
(state_group_id,) = state_group_ids_set
state = await self.state_store.get_state_for_groups(state_group_ids_set)
prev_group, delta_ids = await self.state_store.get_state_group_delta(
state_group_id
)
return _StateCacheEntry(
state=state_list,
state_group=name,
state=state[state_group_id],
state_group=state_group_id,
prev_group=prev_group,
delta_ids=delta_ids,
)
elif len(state_group_ids_set) == 0:
return _StateCacheEntry(state={}, state_group=None)
room_version = await self.store.get_room_version_id(room_id)
state_to_resolve = await self.state_store.get_state_for_groups(
state_group_ids_set
)
result = await self._state_resolution_handler.resolve_state_groups(
room_id,
room_version,
state_groups_ids,
state_to_resolve,
None,
state_res_store=StateResolutionStore(self.store),
)