From d7e1d527f66a429d9aabc407fafaaf7de25ff11d Mon Sep 17 00:00:00 2001 From: nexy7574 Date: Thu, 31 Jul 2025 20:16:31 +0100 Subject: [PATCH] fix(fast-joins): Use fast joins only for remote joins --- src/api/client/membership/join.rs | 32 +++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/api/client/membership/join.rs b/src/api/client/membership/join.rs index 62ac876a..8ff7140a 100644 --- a/src/api/client/membership/join.rs +++ b/src/api/client/membership/join.rs @@ -20,7 +20,7 @@ use conduwuit::{ }; use futures::{FutureExt, StreamExt}; use ruma::{ - CanonicalJsonObject, CanonicalJsonValue, EventId, OwnedEventId, OwnedRoomId, OwnedServerName, + CanonicalJsonObject, CanonicalJsonValue, OwnedEventId, OwnedRoomId, OwnedServerName, OwnedUserId, RoomId, RoomVersionId, UserId, api::{ client::{ @@ -447,11 +447,11 @@ async fn join_room_by_id_helper_remote( // It has enough fields to be called a proper event now let mut join_event = join_event_stub; - info!("Asking {remote_server} for send_join in room {room_id}"); + info!("Asking {remote_server} for send_join in room {room_id} using snazzy fast joins"); let send_join_request = federation::membership::create_join_event::v2::Request { room_id: room_id.to_owned(), event_id: event_id.clone(), - omit_members: false, + omit_members: true, pdu: services .sending .convert_to_outgoing_federation_event(join_event.clone()) @@ -688,6 +688,18 @@ async fn join_room_by_id_helper_remote( .state .set_room_state(room_id, statehash_after_join, &state_lock); + info!("Fetching the rest of the room state \"in the background\""); + // TODO: Actually do this in the background + // tokio::spawn(fetch_state_in_background( + // services.clone(), + // room_id.to_owned(), + // event_id.clone(), + // servers.to_vec(), + // )); + fetch_state_in_background(services, room_id.to_owned(), event_id, servers.to_vec()) + .boxed() + .await?; + info!("Join completed"); Ok(()) } @@ -990,7 +1002,6 @@ async fn join_room_by_id_helper_local( // It has enough fields to be called a proper event now let join_event = join_event_stub; - info!("Performing fancy snazzy new v2 fast join"); let send_join_response = services .sending .send_synapse_request( @@ -998,7 +1009,7 @@ async fn join_room_by_id_helper_local( federation::membership::create_join_event::v2::Request { room_id: room_id.to_owned(), event_id: event_id.clone(), - omit_members: true, + omit_members: false, pdu: services .sending .convert_to_outgoing_federation_event(join_event.clone()) @@ -1026,17 +1037,6 @@ async fn join_room_by_id_helper_local( .handle_incoming_pdu(&remote_server, room_id, &signed_event_id, signed_value, true) .boxed() .await?; - // TODO: Actually do this in the background - // tokio::spawn(fetch_state_in_background( - // services.clone(), - // room_id.to_owned(), - // event_id.clone(), - // servers.to_vec(), - // )); - info!("Fetching state in background"); - fetch_state_in_background(services, room_id.to_owned(), event_id, servers.to_vec()) - .boxed() - .await?; } else { return Err(error); }