Get rid of more unnecessary intermediate collections

next
Jonas Platte 2021-09-05 00:05:59 +02:00
parent 06b0c9267f
commit 910ad7fed1
No known key found for this signature in database
GPG Key ID: CC154DE0E30B7C67
1 changed files with 33 additions and 36 deletions

View File

@ -1396,49 +1396,46 @@ async fn upgrade_outlier_to_timeline_pdu(
} }
if okay { if okay {
let fork_states: Vec<_> = extremity_sstatehashes let mut fork_states = Vec::with_capacity(extremity_sstatehashes.len());
.into_iter() let mut auth_chain_sets = Vec::with_capacity(extremity_sstatehashes.len());
.map(|(sstatehash, prev_event)| {
let mut leaf_state = db for (sstatehash, prev_event) in extremity_sstatehashes {
let mut leaf_state: BTreeMap<_, _> = db
.rooms
.state_full_ids(sstatehash)
.map_err(|_| "Failed to ask db for room state.".to_owned())?;
if let Some(state_key) = &prev_event.state_key {
let shortstatekey = db
.rooms .rooms
.state_full_ids(sstatehash) .get_or_create_shortstatekey(&prev_event.kind, state_key, &db.globals)
.map_err(|_| "Failed to ask db for room state.".to_owned())?; .map_err(|_| "Failed to create shortstatekey.".to_owned())?;
leaf_state.insert(shortstatekey, Arc::new(prev_event.event_id.clone()));
// Now it's the state after the pdu
}
if let Some(state_key) = &prev_event.state_key { let mut state = StateMap::with_capacity(leaf_state.len());
let shortstatekey = db let mut starting_events = Vec::with_capacity(leaf_state.len());
.rooms
.get_or_create_shortstatekey(&prev_event.kind, state_key, &db.globals)
.map_err(|_| "Failed to create shortstatekey.".to_owned())?;
leaf_state.insert(shortstatekey, Arc::new(prev_event.event_id.clone()));
// Now it's the state after the pdu
}
leaf_state for (k, id) in leaf_state {
.into_iter() let k = db
.map(|(k, id)| (db.rooms.get_statekey_from_short(k).map(|k| (k, id)))) .rooms
.collect::<Result<StateMap<_>>>() .get_statekey_from_short(k)
.map_err(|_| "Failed to get_statekey_from_short.".to_owned()) .map_err(|_| "Failed to get_statekey_from_short.".to_owned())?;
})
.collect::<StdResult<_, _>>()?; state.insert(k, (*id).clone());
starting_events.push(id);
}
let mut auth_chain_sets = Vec::new();
for state in &fork_states {
auth_chain_sets.push( auth_chain_sets.push(
get_auth_chain( get_auth_chain(&room_id, starting_events, db)
&room_id, .map_err(|_| "Failed to load auth chain.".to_owned())?
state.iter().map(|(_, id)| id.clone()).collect(), .map(|event_id| (*event_id).clone())
db, .collect(),
)
.map_err(|_| "Failed to load auth chain.".to_owned())?
.map(|event_id| (*event_id).clone())
.collect(),
); );
}
let fork_states = &fork_states fork_states.push(state);
.into_iter() }
.map(|map| map.into_iter().map(|(k, id)| (k, (*id).clone())).collect())
.collect::<Vec<_>>();
state_at_incoming_event = match state_res::StateResolution::resolve( state_at_incoming_event = match state_res::StateResolution::resolve(
&room_id, &room_id,