diff --git a/src/admin/debug/commands.rs b/src/admin/debug/commands.rs index 6c9c3e05..20ac7a59 100644 --- a/src/admin/debug/commands.rs +++ b/src/admin/debug/commands.rs @@ -638,7 +638,7 @@ pub(super) async fn force_set_room_state_from_server( self.services .rooms - .outlier + .timeline .add_pdu_outlier(&event_id, &value); if let Some(state_key) = &pdu.state_key { @@ -668,7 +668,7 @@ pub(super) async fn force_set_room_state_from_server( self.services .rooms - .outlier + .timeline .add_pdu_outlier(&event_id, &value); } diff --git a/src/api/client/membership/join.rs b/src/api/client/membership/join.rs index 7fb370e7..ab0ec75c 100644 --- a/src/api/client/membership/join.rs +++ b/src/api/client/membership/join.rs @@ -561,8 +561,9 @@ async fn join_room_by_id_helper_remote( services .rooms - .outlier + .timeline .add_pdu_outlier(&event_id, &value); + if let Some(state_key) = &pdu.state_key { let shortstatekey = services .rooms @@ -595,7 +596,7 @@ async fn join_room_by_id_helper_remote( .ready_for_each(|(event_id, value)| { services .rooms - .outlier + .timeline .add_pdu_outlier(&event_id, &value); }) .await; diff --git a/src/api/client/membership/knock.rs b/src/api/client/membership/knock.rs index db57b411..c3c540b1 100644 --- a/src/api/client/membership/knock.rs +++ b/src/api/client/membership/knock.rs @@ -541,8 +541,9 @@ async fn knock_room_helper_remote( services .rooms - .outlier + .timeline .add_pdu_outlier(&event_id, &event); + state_map.insert(shortstatekey, event_id.clone()); } diff --git a/src/service/rooms/event_handler/fetch_prev.rs b/src/service/rooms/event_handler/fetch_prev.rs index 25a78367..f57768bc 100644 --- a/src/service/rooms/event_handler/fetch_prev.rs +++ b/src/service/rooms/event_handler/fetch_prev.rs @@ -73,7 +73,7 @@ where if json_opt.is_none() { json_opt = self .services - .outlier + .timeline .get_outlier_pdu_json(&prev_event_id) .await .ok(); diff --git a/src/service/rooms/event_handler/handle_outlier_pdu.rs b/src/service/rooms/event_handler/handle_outlier_pdu.rs index 3ae93a66..58021d09 100644 --- a/src/service/rooms/event_handler/handle_outlier_pdu.rs +++ b/src/service/rooms/event_handler/handle_outlier_pdu.rs @@ -151,7 +151,7 @@ where // 7. Persist the event as an outlier. self.services - .outlier + .timeline .add_pdu_outlier(pdu_event.event_id(), &incoming_pdu); trace!("Added pdu as outlier."); diff --git a/src/service/rooms/event_handler/mod.rs b/src/service/rooms/event_handler/mod.rs index bc91f17d..d37316bf 100644 --- a/src/service/rooms/event_handler/mod.rs +++ b/src/service/rooms/event_handler/mod.rs @@ -41,7 +41,6 @@ struct Services { sending: Dep, auth_chain: Dep, metadata: Dep, - outlier: Dep, pdu_metadata: Dep, server_keys: Dep, short: Dep, @@ -66,7 +65,6 @@ impl crate::Service for Service { sending: args.depend::("sending"), auth_chain: args.depend::("rooms::auth_chain"), metadata: args.depend::("rooms::metadata"), - outlier: args.depend::("rooms::outlier"), server_keys: args.depend::("server_keys"), pdu_metadata: args.depend::("rooms::pdu_metadata"), short: args.depend::("rooms::short"), diff --git a/src/service/rooms/mod.rs b/src/service/rooms/mod.rs index 44a83582..f069a58d 100644 --- a/src/service/rooms/mod.rs +++ b/src/service/rooms/mod.rs @@ -4,7 +4,6 @@ pub mod directory; pub mod event_handler; pub mod lazy_loading; pub mod metadata; -pub mod outlier; pub mod pdu_metadata; pub mod read_receipt; pub mod search; @@ -28,7 +27,6 @@ pub struct Service { pub event_handler: Arc, pub lazy_loading: Arc, pub metadata: Arc, - pub outlier: Arc, pub pdu_metadata: Arc, pub read_receipt: Arc, pub search: Arc, diff --git a/src/service/rooms/outlier/mod.rs b/src/service/rooms/outlier/mod.rs deleted file mode 100644 index 29dcb782..00000000 --- a/src/service/rooms/outlier/mod.rs +++ /dev/null @@ -1,54 +0,0 @@ -use std::sync::Arc; - -use ruma::{CanonicalJsonObject, EventId}; -use tuwunel_core::{Result, implement, matrix::PduEvent}; -use tuwunel_database::{Deserialized, Json, Map}; - -pub struct Service { - db: Data, -} - -struct Data { - eventid_outlierpdu: Arc, -} - -impl crate::Service for Service { - fn build(args: crate::Args<'_>) -> Result> { - Ok(Arc::new(Self { - db: Data { - eventid_outlierpdu: args.db["eventid_outlierpdu"].clone(), - }, - })) - } - - fn name(&self) -> &str { crate::service::make_name(std::module_path!()) } -} - -/// Returns the pdu from the outlier tree. -#[implement(Service)] -pub async fn get_outlier_pdu_json(&self, event_id: &EventId) -> Result { - self.db - .eventid_outlierpdu - .get(event_id) - .await - .deserialized() -} - -/// Returns the pdu from the outlier tree. -#[implement(Service)] -pub async fn get_pdu_outlier(&self, event_id: &EventId) -> Result { - self.db - .eventid_outlierpdu - .get(event_id) - .await - .deserialized() -} - -/// Append the PDU as an outlier. -#[implement(Service)] -#[tracing::instrument(skip(self, pdu), level = "debug")] -pub fn add_pdu_outlier(&self, event_id: &EventId, pdu: &CanonicalJsonObject) { - self.db - .eventid_outlierpdu - .raw_put(event_id, Json(pdu)); -} diff --git a/src/service/rooms/timeline/mod.rs b/src/service/rooms/timeline/mod.rs index 20b7a21a..c5da5fa4 100644 --- a/src/service/rooms/timeline/mod.rs +++ b/src/service/rooms/timeline/mod.rs @@ -167,6 +167,14 @@ pub async fn replace_pdu(&self, pdu_id: &RawPduId, pdu_json: &CanonicalJsonObjec Ok(()) } +#[implement(Service)] +#[tracing::instrument(skip(self, pdu), level = "debug")] +pub fn add_pdu_outlier(&self, event_id: &EventId, pdu: &CanonicalJsonObject) { + self.db + .eventid_outlierpdu + .raw_put(event_id, Json(pdu)); +} + #[implement(Service)] #[tracing::instrument(skip(self), level = "debug")] pub async fn first_pdu_in_room(&self, room_id: &RoomId) -> Result { diff --git a/src/service/services.rs b/src/service/services.rs index e225e347..d51cb963 100644 --- a/src/service/services.rs +++ b/src/service/services.rs @@ -82,7 +82,6 @@ impl Services { event_handler: build!(rooms::event_handler::Service), lazy_loading: build!(rooms::lazy_loading::Service), metadata: build!(rooms::metadata::Service), - outlier: build!(rooms::outlier::Service), pdu_metadata: build!(rooms::pdu_metadata::Service), read_receipt: build!(rooms::read_receipt::Service), search: build!(rooms::search::Service),