From e5a26de606b8bc2ecf84e3bf149604f59d76f21a Mon Sep 17 00:00:00 2001 From: Jonathan de Jong Date: Sun, 4 Jul 2021 13:14:01 +0200 Subject: [PATCH] misc cleanup --- src/client_server/account.rs | 6 ++-- src/client_server/alias.rs | 3 -- src/client_server/backup.rs | 5 +-- src/client_server/config.rs | 5 +-- src/client_server/context.rs | 5 ++- src/client_server/device.rs | 5 +-- src/client_server/directory.rs | 3 -- src/client_server/keys.rs | 7 ++-- src/client_server/media.rs | 7 ++-- src/client_server/membership.rs | 1 - src/client_server/message.rs | 4 +-- src/client_server/mod.rs | 4 +-- src/client_server/presence.rs | 5 ++- src/client_server/profile.rs | 5 ++- src/client_server/push.rs | 5 +-- src/client_server/read_marker.rs | 5 ++- src/client_server/redact.rs | 4 +-- src/client_server/room.rs | 6 ++-- src/client_server/search.rs | 4 +-- src/client_server/session.rs | 6 ++-- src/client_server/state.rs | 3 -- src/client_server/sync.rs | 1 - src/client_server/tag.rs | 5 ++- src/client_server/to_device.rs | 5 +-- src/client_server/typing.rs | 5 +-- src/client_server/user_directory.rs | 5 +-- src/database.rs | 9 +++-- src/database/admin.rs | 53 ++++++++++++++++------------- src/lib.rs | 3 +- src/main.rs | 7 ++-- src/ruma_wrapper.rs | 5 ++- src/server_server.rs | 2 +- 32 files changed, 77 insertions(+), 121 deletions(-) diff --git a/src/client_server/account.rs b/src/client_server/account.rs index dad1b2a9..d76816b6 100644 --- a/src/client_server/account.rs +++ b/src/client_server/account.rs @@ -1,7 +1,7 @@ -use std::{collections::BTreeMap, convert::TryInto, sync::Arc}; +use std::{collections::BTreeMap, convert::TryInto}; -use super::{State, DEVICE_ID_LENGTH, SESSION_ID_LENGTH, TOKEN_LENGTH}; -use crate::{database::ReadGuard, pdu::PduBuilder, utils, ConduitResult, Database, Error, Ruma}; +use super::{DEVICE_ID_LENGTH, SESSION_ID_LENGTH, TOKEN_LENGTH}; +use crate::{database::ReadGuard, pdu::PduBuilder, utils, ConduitResult, Error, Ruma}; use log::info; use ruma::{ api::client::{ diff --git a/src/client_server/alias.rs b/src/client_server/alias.rs index e9e3a23e..440b505d 100644 --- a/src/client_server/alias.rs +++ b/src/client_server/alias.rs @@ -1,6 +1,3 @@ -use std::sync::Arc; - -use super::State; use crate::{database::ReadGuard, ConduitResult, Database, Error, Ruma}; use regex::Regex; use ruma::{ diff --git a/src/client_server/backup.rs b/src/client_server/backup.rs index a50e71e8..8412778a 100644 --- a/src/client_server/backup.rs +++ b/src/client_server/backup.rs @@ -1,7 +1,4 @@ -use std::sync::Arc; - -use super::State; -use crate::{database::ReadGuard, ConduitResult, Database, Error, Ruma}; +use crate::{database::ReadGuard, ConduitResult, Error, Ruma}; use ruma::api::client::{ error::ErrorKind, r0::backup::{ diff --git a/src/client_server/config.rs b/src/client_server/config.rs index ed2628a9..da504e14 100644 --- a/src/client_server/config.rs +++ b/src/client_server/config.rs @@ -1,7 +1,4 @@ -use std::sync::Arc; - -use super::State; -use crate::{database::ReadGuard, ConduitResult, Database, Error, Ruma}; +use crate::{database::ReadGuard, ConduitResult, Error, Ruma}; use ruma::{ api::client::{ error::ErrorKind, diff --git a/src/client_server/context.rs b/src/client_server/context.rs index 7a3c083a..7d857e14 100644 --- a/src/client_server/context.rs +++ b/src/client_server/context.rs @@ -1,7 +1,6 @@ -use super::State; -use crate::{database::ReadGuard, ConduitResult, Database, Error, Ruma}; +use crate::{database::ReadGuard, ConduitResult, Error, Ruma}; use ruma::api::client::{error::ErrorKind, r0::context::get_context}; -use std::{convert::TryFrom, sync::Arc}; +use std::convert::TryFrom; #[cfg(feature = "conduit_bin")] use rocket::get; diff --git a/src/client_server/device.rs b/src/client_server/device.rs index 361af68e..4d8d16c6 100644 --- a/src/client_server/device.rs +++ b/src/client_server/device.rs @@ -1,7 +1,4 @@ -use std::sync::Arc; - -use super::State; -use crate::{database::ReadGuard, utils, ConduitResult, Database, Error, Ruma}; +use crate::{database::ReadGuard, utils, ConduitResult, Error, Ruma}; use ruma::api::client::{ error::ErrorKind, r0::{ diff --git a/src/client_server/directory.rs b/src/client_server/directory.rs index 3c96ec14..5cfc4585 100644 --- a/src/client_server/directory.rs +++ b/src/client_server/directory.rs @@ -1,6 +1,3 @@ -use std::sync::Arc; - -use super::State; use crate::{database::ReadGuard, ConduitResult, Database, Error, Result, Ruma}; use log::info; use ruma::{ diff --git a/src/client_server/keys.rs b/src/client_server/keys.rs index 310fd620..39cf7bea 100644 --- a/src/client_server/keys.rs +++ b/src/client_server/keys.rs @@ -1,4 +1,4 @@ -use super::{State, SESSION_ID_LENGTH}; +use super::SESSION_ID_LENGTH; use crate::{database::ReadGuard, utils, ConduitResult, Database, Error, Result, Ruma}; use ruma::{ api::client::{ @@ -14,10 +14,7 @@ use ruma::{ encryption::UnsignedDeviceInfo, DeviceId, DeviceKeyAlgorithm, UserId, }; -use std::{ - collections::{BTreeMap, HashSet}, - sync::Arc, -}; +use std::collections::{BTreeMap, HashSet}; #[cfg(feature = "conduit_bin")] use rocket::{get, post}; diff --git a/src/client_server/media.rs b/src/client_server/media.rs index cd7f714c..588e5f73 100644 --- a/src/client_server/media.rs +++ b/src/client_server/media.rs @@ -1,15 +1,12 @@ -use super::State; -use crate::{ - database::media::FileMeta, database::ReadGuard, utils, ConduitResult, Database, Error, Ruma, -}; +use crate::{database::media::FileMeta, database::ReadGuard, utils, ConduitResult, Error, Ruma}; use ruma::api::client::{ error::ErrorKind, r0::media::{create_content, get_content, get_content_thumbnail, get_media_config}, }; +use std::convert::TryInto; #[cfg(feature = "conduit_bin")] use rocket::{get, post}; -use std::{convert::TryInto, sync::Arc}; const MXC_LENGTH: usize = 32; diff --git a/src/client_server/membership.rs b/src/client_server/membership.rs index b3f0a0e3..87439406 100644 --- a/src/client_server/membership.rs +++ b/src/client_server/membership.rs @@ -1,4 +1,3 @@ -use super::State; use crate::{ client_server, database::ReadGuard, diff --git a/src/client_server/message.rs b/src/client_server/message.rs index 9764d53b..d439535a 100644 --- a/src/client_server/message.rs +++ b/src/client_server/message.rs @@ -1,5 +1,4 @@ -use super::State; -use crate::{database::ReadGuard, pdu::PduBuilder, utils, ConduitResult, Database, Error, Ruma}; +use crate::{database::ReadGuard, pdu::PduBuilder, utils, ConduitResult, Error, Ruma}; use ruma::{ api::client::{ error::ErrorKind, @@ -11,7 +10,6 @@ use ruma::{ use std::{ collections::BTreeMap, convert::{TryFrom, TryInto}, - sync::Arc, }; #[cfg(feature = "conduit_bin")] diff --git a/src/client_server/mod.rs b/src/client_server/mod.rs index 825dbbb9..f211a571 100644 --- a/src/client_server/mod.rs +++ b/src/client_server/mod.rs @@ -64,9 +64,7 @@ pub use voip::*; use super::State; #[cfg(feature = "conduit_bin")] use { - crate::ConduitResult, - rocket::{options, State}, - ruma::api::client::r0::to_device::send_event_to_device, + crate::ConduitResult, rocket::options, ruma::api::client::r0::to_device::send_event_to_device, }; pub const DEVICE_ID_LENGTH: usize = 10; diff --git a/src/client_server/presence.rs b/src/client_server/presence.rs index 69cde563..c96e62bb 100644 --- a/src/client_server/presence.rs +++ b/src/client_server/presence.rs @@ -1,7 +1,6 @@ -use super::State; -use crate::{database::ReadGuard, utils, ConduitResult, Database, Ruma}; +use crate::{database::ReadGuard, utils, ConduitResult, Ruma}; use ruma::api::client::r0::presence::{get_presence, set_presence}; -use std::{convert::TryInto, sync::Arc, time::Duration}; +use std::{convert::TryInto, time::Duration}; #[cfg(feature = "conduit_bin")] use rocket::{get, put}; diff --git a/src/client_server/profile.rs b/src/client_server/profile.rs index b7e79985..f516f91d 100644 --- a/src/client_server/profile.rs +++ b/src/client_server/profile.rs @@ -1,5 +1,4 @@ -use super::State; -use crate::{database::ReadGuard, pdu::PduBuilder, utils, ConduitResult, Database, Error, Ruma}; +use crate::{database::ReadGuard, pdu::PduBuilder, utils, ConduitResult, Error, Ruma}; use ruma::{ api::client::{ error::ErrorKind, @@ -10,10 +9,10 @@ use ruma::{ events::EventType, serde::Raw, }; +use std::convert::TryInto; #[cfg(feature = "conduit_bin")] use rocket::{get, put}; -use std::{convert::TryInto, sync::Arc}; #[cfg_attr( feature = "conduit_bin", diff --git a/src/client_server/push.rs b/src/client_server/push.rs index 8d4564cb..e7182872 100644 --- a/src/client_server/push.rs +++ b/src/client_server/push.rs @@ -1,7 +1,4 @@ -use std::sync::Arc; - -use super::State; -use crate::{database::ReadGuard, ConduitResult, Database, Error, Ruma}; +use crate::{database::ReadGuard, ConduitResult, Error, Ruma}; use ruma::{ api::client::{ error::ErrorKind, diff --git a/src/client_server/read_marker.rs b/src/client_server/read_marker.rs index 7ab367f3..64f8e261 100644 --- a/src/client_server/read_marker.rs +++ b/src/client_server/read_marker.rs @@ -1,5 +1,4 @@ -use super::State; -use crate::{database::ReadGuard, ConduitResult, Database, Error, Ruma}; +use crate::{database::ReadGuard, ConduitResult, Error, Ruma}; use ruma::{ api::client::{ error::ErrorKind, @@ -9,10 +8,10 @@ use ruma::{ receipt::ReceiptType, MilliSecondsSinceUnixEpoch, }; +use std::collections::BTreeMap; #[cfg(feature = "conduit_bin")] use rocket::post; -use std::{collections::BTreeMap, sync::Arc}; #[cfg_attr( feature = "conduit_bin", diff --git a/src/client_server/redact.rs b/src/client_server/redact.rs index 98e01e75..af1b242a 100644 --- a/src/client_server/redact.rs +++ b/src/client_server/redact.rs @@ -1,10 +1,8 @@ -use super::State; -use crate::{database::ReadGuard, pdu::PduBuilder, ConduitResult, Database, Ruma}; +use crate::{database::ReadGuard, pdu::PduBuilder, ConduitResult, Ruma}; use ruma::{ api::client::r0::redact::redact_event, events::{room::redaction, EventType}, }; -use std::sync::Arc; #[cfg(feature = "conduit_bin")] use rocket::put; diff --git a/src/client_server/room.rs b/src/client_server/room.rs index a0b7eb80..c01c5f86 100644 --- a/src/client_server/room.rs +++ b/src/client_server/room.rs @@ -1,7 +1,5 @@ -use super::State; use crate::{ - client_server::invite_helper, database::ReadGuard, pdu::PduBuilder, ConduitResult, Database, - Error, Ruma, + client_server::invite_helper, database::ReadGuard, pdu::PduBuilder, ConduitResult, Error, Ruma, }; use log::info; use ruma::{ @@ -16,7 +14,7 @@ use ruma::{ serde::Raw, RoomAliasId, RoomId, RoomVersionId, }; -use std::{cmp::max, collections::BTreeMap, convert::TryFrom, sync::Arc}; +use std::{cmp::max, collections::BTreeMap, convert::TryFrom}; #[cfg(feature = "conduit_bin")] use rocket::{get, post}; diff --git a/src/client_server/search.rs b/src/client_server/search.rs index 25b04588..cfe1345a 100644 --- a/src/client_server/search.rs +++ b/src/client_server/search.rs @@ -1,7 +1,5 @@ -use super::State; -use crate::{database::ReadGuard, ConduitResult, Database, Error, Ruma}; +use crate::{database::ReadGuard, ConduitResult, Error, Ruma}; use ruma::api::client::{error::ErrorKind, r0::search::search_events}; -use std::sync::Arc; #[cfg(feature = "conduit_bin")] use rocket::post; diff --git a/src/client_server/session.rs b/src/client_server/session.rs index ff018d2d..844ef0c7 100644 --- a/src/client_server/session.rs +++ b/src/client_server/session.rs @@ -1,7 +1,5 @@ -use std::sync::Arc; - -use super::{State, DEVICE_ID_LENGTH, TOKEN_LENGTH}; -use crate::{database::ReadGuard, utils, ConduitResult, Database, Error, Ruma}; +use super::{DEVICE_ID_LENGTH, TOKEN_LENGTH}; +use crate::{database::ReadGuard, utils, ConduitResult, Error, Ruma}; use log::info; use ruma::{ api::client::{ diff --git a/src/client_server/state.rs b/src/client_server/state.rs index 1798536b..dea52aa3 100644 --- a/src/client_server/state.rs +++ b/src/client_server/state.rs @@ -1,6 +1,3 @@ -use std::sync::Arc; - -use super::State; use crate::{database::ReadGuard, pdu::PduBuilder, ConduitResult, Database, Error, Result, Ruma}; use ruma::{ api::client::{ diff --git a/src/client_server/sync.rs b/src/client_server/sync.rs index ddc48702..09ac8f01 100644 --- a/src/client_server/sync.rs +++ b/src/client_server/sync.rs @@ -1,4 +1,3 @@ -use super::State; use crate::{database::ReadGuard, ConduitResult, Database, Error, Result, Ruma, RumaResponse}; use log::error; use ruma::{ diff --git a/src/client_server/tag.rs b/src/client_server/tag.rs index cc0d487a..8fa1d051 100644 --- a/src/client_server/tag.rs +++ b/src/client_server/tag.rs @@ -1,10 +1,9 @@ -use super::State; -use crate::{database::ReadGuard, ConduitResult, Database, Ruma}; +use crate::{database::ReadGuard, ConduitResult, Ruma}; use ruma::{ api::client::r0::tag::{create_tag, delete_tag, get_tags}, events::EventType, }; -use std::{collections::BTreeMap, sync::Arc}; +use std::collections::BTreeMap; #[cfg(feature = "conduit_bin")] use rocket::{delete, get, put}; diff --git a/src/client_server/to_device.rs b/src/client_server/to_device.rs index 2814a9d8..761a3596 100644 --- a/src/client_server/to_device.rs +++ b/src/client_server/to_device.rs @@ -1,7 +1,4 @@ -use std::sync::Arc; - -use super::State; -use crate::{database::ReadGuard, ConduitResult, Database, Error, Ruma}; +use crate::{database::ReadGuard, ConduitResult, Error, Ruma}; use ruma::{ api::client::{error::ErrorKind, r0::to_device::send_event_to_device}, to_device::DeviceIdOrAllDevices, diff --git a/src/client_server/typing.rs b/src/client_server/typing.rs index f39ef374..8f3a6437 100644 --- a/src/client_server/typing.rs +++ b/src/client_server/typing.rs @@ -1,7 +1,4 @@ -use std::sync::Arc; - -use super::State; -use crate::{database::ReadGuard, utils, ConduitResult, Database, Ruma}; +use crate::{database::ReadGuard, utils, ConduitResult, Ruma}; use create_typing_event::Typing; use ruma::api::client::r0::typing::create_typing_event; diff --git a/src/client_server/user_directory.rs b/src/client_server/user_directory.rs index ce382b00..226fe6ea 100644 --- a/src/client_server/user_directory.rs +++ b/src/client_server/user_directory.rs @@ -1,7 +1,4 @@ -use std::sync::Arc; - -use super::State; -use crate::{database::ReadGuard, ConduitResult, Database, Ruma}; +use crate::{database::ReadGuard, ConduitResult, Ruma}; use ruma::api::client::r0::user_directory::search_users; #[cfg(feature = "conduit_bin")] diff --git a/src/database.rs b/src/database.rs index 7c60b10a..99866511 100644 --- a/src/database.rs +++ b/src/database.rs @@ -34,7 +34,7 @@ use std::{ ops::Deref, sync::{Arc, RwLock}, }; -use tokio::sync::{OwnedRwLockReadGuard, RwLock as TokioRwLock, RwLockReadGuard, Semaphore}; +use tokio::sync::{OwnedRwLockReadGuard, RwLock as TokioRwLock, Semaphore}; use self::proxy::ProxyConfig; @@ -462,7 +462,6 @@ impl Deref for ReadGuard { } } -#[cfg(feature = "conduit_bin")] #[rocket::async_trait] impl<'r> FromRequest<'r> for ReadGuard { type Error = (); @@ -473,3 +472,9 @@ impl<'r> FromRequest<'r> for ReadGuard { Ok(ReadGuard(Arc::clone(&db).read_owned().await)).or_forward(()) } } + +impl Into for OwnedRwLockReadGuard { + fn into(self) -> ReadGuard { + ReadGuard(self) + } +} diff --git a/src/database/admin.rs b/src/database/admin.rs index fcc13c37..cd5fa847 100644 --- a/src/database/admin.rs +++ b/src/database/admin.rs @@ -10,7 +10,7 @@ use ruma::{ events::{room::message, EventType}, UserId, }; -use tokio::sync::RwLock; +use tokio::sync::{RwLock, RwLockReadGuard}; pub enum AdminCommand { RegisterAppservice(serde_yaml::Value), @@ -54,47 +54,52 @@ impl Admin { drop(guard); - let send_message = |message: message::MessageEventContent| {}; + let send_message = + |message: message::MessageEventContent, guard: RwLockReadGuard<'_, Database>| { + if let Some(conduit_room) = &conduit_room { + guard + .rooms + .build_and_append_pdu( + PduBuilder { + event_type: EventType::RoomMessage, + content: serde_json::to_value(message) + .expect("event is valid, we just created it"), + unsigned: None, + state_key: None, + redacts: None, + }, + &conduit_user, + &conduit_room, + &guard, + ) + .unwrap(); + } + }; loop { tokio::select! { Some(event) = receiver.next() => { + let guard = db.read().await; + match event { AdminCommand::RegisterAppservice(yaml) => { - db.read().await.appservice.register_appservice(yaml).unwrap(); // TODO handle error + guard.appservice.register_appservice(yaml).unwrap(); // TODO handle error } AdminCommand::ListAppservices => { - if let Ok(appservices) = db.read().await.appservice.iter_ids().map(|ids| ids.collect::>()) { + if let Ok(appservices) = guard.appservice.iter_ids().map(|ids| ids.collect::>()) { let count = appservices.len(); let output = format!( "Appservices ({}): {}", count, appservices.into_iter().filter_map(|r| r.ok()).collect::>().join(", ") ); - send_message(message::MessageEventContent::text_plain(output)); + send_message(message::MessageEventContent::text_plain(output), guard); } else { - send_message(message::MessageEventContent::text_plain("Failed to get appservices.")); + send_message(message::MessageEventContent::text_plain("Failed to get appservices."), guard); } } AdminCommand::SendMessage(message) => { - if let Some(conduit_room) = &conduit_room { - let guard = db.read().await; - guard.rooms - .build_and_append_pdu( - PduBuilder { - event_type: EventType::RoomMessage, - content: serde_json::to_value(message) - .expect("event is valid, we just created it"), - unsigned: None, - state_key: None, - redacts: None, - }, - &conduit_user, - &conduit_room, - &guard, - ) - .unwrap(); - } + send_message(message, guard) } } } diff --git a/src/lib.rs b/src/lib.rs index c1f0c4b0..50ca6ea6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -15,8 +15,7 @@ pub use error::{Error, Result}; pub use pdu::PduEvent; pub use rocket::Config; pub use ruma_wrapper::{ConduitResult, Ruma, RumaResponse}; -use std::{ops::Deref, sync::Arc}; -use tokio::sync::RwLock; +use std::ops::Deref; pub struct State<'r, T: Send + Sync + 'static>(pub &'r T); diff --git a/src/main.rs b/src/main.rs index 9968b87a..55987285 100644 --- a/src/main.rs +++ b/src/main.rs @@ -231,8 +231,11 @@ async fn main() { }; log::warn!("wal-trunc: locked, flushing..."); let start = Instant::now(); - guard.flush_wal(); - log::warn!("wal-trunc: flushed in {:?}", start.elapsed()); + if let Err(e) = guard.flush_wal() { + log::warn!("wal-trunc: errored: {}", e); + } else { + log::warn!("wal-trunc: flushed in {:?}", start.elapsed()); + } } else { break; } diff --git a/src/ruma_wrapper.rs b/src/ruma_wrapper.rs index 647d25e6..d06f224a 100644 --- a/src/ruma_wrapper.rs +++ b/src/ruma_wrapper.rs @@ -9,7 +9,7 @@ use std::ops::Deref; #[cfg(feature = "conduit_bin")] use { - crate::{server_server, Database}, + crate::server_server, log::{debug, warn}, rocket::{ data::{self, ByteUnit, Data, FromData}, @@ -17,13 +17,12 @@ use { outcome::Outcome::*, response::{self, Responder}, tokio::io::AsyncReadExt, - Request, State, + Request, }, ruma::api::{AuthScheme, IncomingRequest}, std::collections::BTreeMap, std::convert::TryFrom, std::io::Cursor, - std::sync::Arc, }; /// This struct converts rocket requests into ruma structs by converting them into http requests diff --git a/src/server_server.rs b/src/server_server.rs index b3e8f1b6..306afd26 100644 --- a/src/server_server.rs +++ b/src/server_server.rs @@ -7,7 +7,7 @@ use get_profile_information::v1::ProfileField; use http::header::{HeaderValue, AUTHORIZATION, HOST}; use log::{debug, error, info, trace, warn}; use regex::Regex; -use rocket::{response::content::Json, State}; +use rocket::response::content::Json; use ruma::{ api::{ client::error::{Error as RumaError, ErrorKind},