Revert "TEMPORARY Subdivide _resolve_events Measure blocks"

This reverts commit f3db863420.
matrix-org-hotfixes
Olivier Wilkinson (reivilibre) 2023-10-16 18:24:46 +01:00
parent 1e1cf4bb9d
commit 8c60ebf209
1 changed files with 78 additions and 91 deletions

View File

@ -38,7 +38,6 @@ from synapse.api.errors import AuthError
from synapse.api.room_versions import RoomVersion from synapse.api.room_versions import RoomVersion
from synapse.events import EventBase from synapse.events import EventBase
from synapse.types import MutableStateMap, StateMap, StrCollection from synapse.types import MutableStateMap, StateMap, StrCollection
from synapse.util.metrics import Measure
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -105,118 +104,106 @@ async def resolve_events_with_store(
Returns: Returns:
A map from (type, state_key) to event_id. A map from (type, state_key) to event_id.
""" """
with Measure(clock, "rei_state_res:rews2_a"): # TODO temporary (rei)
logger.debug("Computing conflicted state")
# We use event_map as a cache, so if its None we need to initialize it logger.debug("Computing conflicted state")
if event_map is None:
event_map = {}
# First split up the un/conflicted state # We use event_map as a cache, so if its None we need to initialize it
unconflicted_state, conflicted_state = _seperate(state_sets) if event_map is None:
event_map = {}
if not conflicted_state: # First split up the un/conflicted state
return unconflicted_state unconflicted_state, conflicted_state = _seperate(state_sets)
logger.debug("%d conflicted state entries", len(conflicted_state)) if not conflicted_state:
logger.debug("Calculating auth chain difference") return unconflicted_state
# Also fetch all auth events that appear in only some of the state sets' logger.debug("%d conflicted state entries", len(conflicted_state))
# auth chains. logger.debug("Calculating auth chain difference")
auth_diff = await _get_auth_chain_difference(
room_id, state_sets, event_map, state_res_store # Also fetch all auth events that appear in only some of the state sets'
# auth chains.
auth_diff = await _get_auth_chain_difference(
room_id, state_sets, event_map, state_res_store
)
full_conflicted_set = set(
itertools.chain(
itertools.chain.from_iterable(conflicted_state.values()), auth_diff
) )
)
with Measure(clock, "rei_state_res:rews2_b"): # TODO temporary (rei) events = await state_res_store.get_events(
full_conflicted_set = set( [eid for eid in full_conflicted_set if eid not in event_map],
itertools.chain( allow_rejected=True,
itertools.chain.from_iterable(conflicted_state.values()), auth_diff )
) event_map.update(events)
)
events = await state_res_store.get_events( # everything in the event map should be in the right room
[eid for eid in full_conflicted_set if eid not in event_map], for event in event_map.values():
allow_rejected=True, if event.room_id != room_id:
) raise Exception(
event_map.update(events) "Attempting to state-resolve for room %s with event %s which is in %s"
% (
with Measure(clock, "rei_state_res:rews2_c"): # TODO temporary (rei) room_id,
# everything in the event map should be in the right room event.event_id,
for event in event_map.values(): event.room_id,
if event.room_id != room_id:
raise Exception(
"Attempting to state-resolve for room %s with event %s which is in %s"
% (
room_id,
event.event_id,
event.room_id,
)
) )
)
full_conflicted_set = {eid for eid in full_conflicted_set if eid in event_map} full_conflicted_set = {eid for eid in full_conflicted_set if eid in event_map}
logger.debug("%d full_conflicted_set entries", len(full_conflicted_set)) logger.debug("%d full_conflicted_set entries", len(full_conflicted_set))
# Get and sort all the power events (kicks/bans/etc) # Get and sort all the power events (kicks/bans/etc)
power_events = ( power_events = (
eid for eid in full_conflicted_set if _is_power_event(event_map[eid]) eid for eid in full_conflicted_set if _is_power_event(event_map[eid])
) )
with Measure(clock, "rei_state_res:rews2_d"): # TODO temporary (rei) sorted_power_events = await _reverse_topological_power_sort(
sorted_power_events = await _reverse_topological_power_sort( clock, room_id, power_events, event_map, state_res_store, full_conflicted_set
clock, )
room_id,
power_events,
event_map,
state_res_store,
full_conflicted_set,
)
logger.debug("sorted %d power events", len(sorted_power_events)) logger.debug("sorted %d power events", len(sorted_power_events))
with Measure(clock, "rei_state_res:rews2_e"): # TODO temporary (rei) # Now sequentially auth each one
# Now sequentially auth each one resolved_state = await _iterative_auth_checks(
resolved_state = await _iterative_auth_checks( clock,
clock, room_id,
room_id, room_version,
room_version, sorted_power_events,
sorted_power_events, unconflicted_state,
unconflicted_state, event_map,
event_map, state_res_store,
state_res_store, )
)
logger.debug("resolved power events") logger.debug("resolved power events")
with Measure(clock, "rei_state_res:rews2_f"): # TODO temporary (rei) # OK, so we've now resolved the power events. Now sort the remaining
# OK, so we've now resolved the power events. Now sort the remaining # events using the mainline of the resolved power level.
# events using the mainline of the resolved power level.
set_power_events = set(sorted_power_events) set_power_events = set(sorted_power_events)
leftover_events = [ leftover_events = [
ev_id for ev_id in full_conflicted_set if ev_id not in set_power_events ev_id for ev_id in full_conflicted_set if ev_id not in set_power_events
] ]
logger.debug("sorting %d remaining events", len(leftover_events)) logger.debug("sorting %d remaining events", len(leftover_events))
with Measure(clock, "rei_state_res:rews2_g"): # TODO temporary (rei) pl = resolved_state.get((EventTypes.PowerLevels, ""), None)
pl = resolved_state.get((EventTypes.PowerLevels, ""), None) leftover_events = await _mainline_sort(
leftover_events = await _mainline_sort( clock, room_id, leftover_events, pl, event_map, state_res_store
clock, room_id, leftover_events, pl, event_map, state_res_store )
)
with Measure(clock, "rei_state_res:rews2_h"): # TODO temporary (rei) logger.debug("resolving remaining events")
logger.debug("resolving remaining events")
resolved_state = await _iterative_auth_checks( resolved_state = await _iterative_auth_checks(
clock, clock,
room_id, room_id,
room_version, room_version,
leftover_events, leftover_events,
resolved_state, resolved_state,
event_map, event_map,
state_res_store, state_res_store,
) )
logger.debug("resolved") logger.debug("resolved")