Revert "TEMPORARY Subdivide _resolve_events Measure blocks"
This reverts commit f3db863420
.
matrix-org-hotfixes
parent
1e1cf4bb9d
commit
8c60ebf209
|
@ -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")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue