Get rid of more unnecessary intermediate collections
This commit is contained in:
		
							parent
							
								
									06b0c9267f
								
							
						
					
					
						commit
						910ad7fed1
					
				
					 1 changed files with 33 additions and 36 deletions
				
			
		|  | @ -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, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue