diff --git a/src/service/rooms/timeline/mod.rs b/src/service/rooms/timeline/mod.rs index efad5be2d52a3ab99dd8be3fb9655cafb0fb9978..52273390d663a54f726d1230e31ca2812555dbc7 100644 --- a/src/service/rooms/timeline/mod.rs +++ b/src/service/rooms/timeline/mod.rs @@ -1065,7 +1065,20 @@ pub async fn backfill_if_required(&self, room_id: &RoomId, from: PduCount) -> Re return Ok(()); } - let mut servers: Vec<&ServerName> = vec![]; + let mut servers: Vec<OwnedServerName> = vec![]; + + // add server names of any trusted key servers if they're in the room + for server in services() + .rooms + .state_cache + .room_servers(room_id) + .filter_map(Result::ok) + .filter(|server| services().globals.trusted_servers().contains(server)) + { + if server != services().globals.server_name() { + servers.push(server); + } + } // add server names from room aliases on the room ID let room_aliases = services() @@ -1076,7 +1089,7 @@ pub async fn backfill_if_required(&self, room_id: &RoomId, from: PduCount) -> Re if let Ok(aliases) = &room_aliases { for alias in aliases { if alias.server_name() != services().globals.server_name() { - servers.push(alias.server_name()); + servers.push(alias.server_name().to_owned()); } } } @@ -1084,7 +1097,7 @@ pub async fn backfill_if_required(&self, room_id: &RoomId, from: PduCount) -> Re // add room ID server name for backfill server if let Some(server) = room_id.server_name() { if server != services().globals.server_name() { - servers.push(server); + servers.push(server.to_owned()); } } @@ -1108,7 +1121,7 @@ pub async fn backfill_if_required(&self, room_id: &RoomId, from: PduCount) -> Re .collect::<Vec<_>>() { if server != services().globals.server_name() { - servers.push(server); + servers.push(server.to_owned()); } } @@ -1130,7 +1143,7 @@ pub async fn backfill_if_required(&self, room_id: &RoomId, from: PduCount) -> Re let response = services() .sending .send_federation_request( - backfill_server, + &backfill_server, federation::backfill::get_backfill::v1::Request { room_id: room_id.to_owned(), v: vec![first_pdu.1.event_id.as_ref().to_owned()], @@ -1142,7 +1155,7 @@ pub async fn backfill_if_required(&self, room_id: &RoomId, from: PduCount) -> Re Ok(response) => { let pub_key_map = RwLock::new(BTreeMap::new()); for pdu in response.pdus { - if let Err(e) = self.backfill_pdu(backfill_server, pdu, &pub_key_map).await { + if let Err(e) = self.backfill_pdu(&backfill_server, pdu, &pub_key_map).await { warn!("Failed to add backfilled pdu in room {room_id}: {e}"); } }