diff --git a/src/database.rs b/src/database.rs index 8a177163..825fb47d 100644 --- a/src/database.rs +++ b/src/database.rs @@ -1,3 +1,4 @@ +use std::hash::Hash; use std::{ collections::{BTreeMap, HashMap, HashSet}, convert::{TryFrom, TryInto}, @@ -8,13 +9,12 @@ use std::{ path::Path, sync::{Arc, Mutex, RwLock}, }; -use std::hash::Hash; use directories::ProjectDirs; use lru_cache::LruCache; use rocket::{ futures::{channel::mpsc, stream::FuturesUnordered, StreamExt}, - outcome::{IntoOutcome, try_outcome}, + outcome::{try_outcome, IntoOutcome}, request::{FromRequest, Request}, Shutdown, State, }; @@ -25,7 +25,7 @@ use tracing::{debug, error, warn}; use abstraction::DatabaseEngine; -use crate::{Error, Result, utils}; +use crate::{utils, Error, Result}; use self::proxy::ProxyConfig; @@ -178,27 +178,27 @@ impl Database { fn check_sled_or_sqlite_db(config: &Config) -> Result<()> { #[cfg(feature = "backend_sqlite")] - { - let path = Path::new(&config.database_path); + { + let path = Path::new(&config.database_path); - let sled_exists = path.join("db").exists(); - let sqlite_exists = path.join("conduit.db").exists(); - if sled_exists { - if sqlite_exists { - // most likely an in-place directory, only warn - warn!("Both sled and sqlite databases are detected in database directory"); - warn!("Currently running from the sqlite database, but consider removing sled database files to free up space") - } else { - error!( + let sled_exists = path.join("db").exists(); + let sqlite_exists = path.join("conduit.db").exists(); + if sled_exists { + if sqlite_exists { + // most likely an in-place directory, only warn + warn!("Both sled and sqlite databases are detected in database directory"); + warn!("Currently running from the sqlite database, but consider removing sled database files to free up space") + } else { + error!( "Sled database detected, conduit now uses sqlite for database operations" ); - error!("This database must be converted to sqlite, go to https://github.com/ShadowJonathan/conduit_toolbox#conduit_sled_to_sqlite"); - return Err(Error::bad_config( - "sled database detected, migrate to sqlite", - )); - } + error!("This database must be converted to sqlite, go to https://github.com/ShadowJonathan/conduit_toolbox#conduit_sled_to_sqlite"); + return Err(Error::bad_config( + "sled database detected, migrate to sqlite", + )); } } + } Ok(()) } @@ -752,9 +752,9 @@ impl Database { drop(guard); #[cfg(feature = "sqlite")] - { - Self::start_wal_clean_task(Arc::clone(&db), &config).await; - } + { + Self::start_wal_clean_task(Arc::clone(&db), &config).await; + } Ok(db) } @@ -905,7 +905,7 @@ impl Database { tokio::spawn(async move { let mut i = interval(timer_interval); #[cfg(unix)] - let mut s = signal(SignalKind::hangup()).unwrap(); + let mut s = signal(SignalKind::hangup()).unwrap(); loop { #[cfg(unix)] @@ -916,13 +916,12 @@ impl Database { _ = s.recv() => { info!("wal-trunc: Received SIGHUP"); } - } - ; + }; #[cfg(not(unix))] - { - i.tick().await; - info!("wal-trunc: Timer ticked") - } + { + i.tick().await; + info!("wal-trunc: Timer ticked") + } let start = Instant::now(); if let Err(e) = db.read().await.flush_wal() { @@ -936,7 +935,9 @@ impl Database { /// Measures memory usage in bytes and how full the caches are in percent for all caches in the Database struct. pub fn get_cache_usage(&mut self) -> Result { - fn memory_usage_of_locked_cache(cache: &mut Mutex>) -> usize { + fn memory_usage_of_locked_cache( + cache: &mut Mutex>, + ) -> usize { let raw_cache = cache.lock().unwrap(); let mut cache_items_size_sum: usize = 0; for cache_item in raw_cache.iter() { @@ -953,44 +954,43 @@ impl Database { cache.lock().unwrap().capacity() } - return - Ok(CacheUsageStatistics { - pdu_cache: ( - memory_usage_of_locked_cache(&mut self.rooms.pdu_cache), - items_in_locked_cache(&mut self.rooms.pdu_cache), - capacity_of_locked_cache(&mut self.rooms.pdu_cache) - ), - auth_chain_cache: ( - memory_usage_of_locked_cache(&mut self.rooms.auth_chain_cache), - items_in_locked_cache(&mut self.rooms.auth_chain_cache), - capacity_of_locked_cache(&mut self.rooms.auth_chain_cache) - ), - shorteventid_cache: ( - memory_usage_of_locked_cache(&mut self.rooms.shorteventid_cache), - items_in_locked_cache(&mut self.rooms.shorteventid_cache), - capacity_of_locked_cache(&mut self.rooms.shorteventid_cache) - ), - eventidshort_cache: ( - memory_usage_of_locked_cache(&mut self.rooms.eventidshort_cache), - items_in_locked_cache(&mut self.rooms.eventidshort_cache), - capacity_of_locked_cache(&mut self.rooms.eventidshort_cache) - ), - statekeyshort_cache: ( - memory_usage_of_locked_cache(&mut self.rooms.statekeyshort_cache), - items_in_locked_cache(&mut self.rooms.statekeyshort_cache), - capacity_of_locked_cache(&mut self.rooms.statekeyshort_cache) - ), - shortstatekey_cache: ( - memory_usage_of_locked_cache(&mut self.rooms.shortstatekey_cache), - items_in_locked_cache(&mut self.rooms.shortstatekey_cache), - capacity_of_locked_cache(&mut self.rooms.shortstatekey_cache) - ), - stateinfo_cache: ( - memory_usage_of_locked_cache(&mut self.rooms.stateinfo_cache), - items_in_locked_cache(&mut self.rooms.stateinfo_cache), - capacity_of_locked_cache(&mut self.rooms.stateinfo_cache) - ), - }); + return Ok(CacheUsageStatistics { + pdu_cache: ( + memory_usage_of_locked_cache(&mut self.rooms.pdu_cache), + items_in_locked_cache(&mut self.rooms.pdu_cache), + capacity_of_locked_cache(&mut self.rooms.pdu_cache), + ), + auth_chain_cache: ( + memory_usage_of_locked_cache(&mut self.rooms.auth_chain_cache), + items_in_locked_cache(&mut self.rooms.auth_chain_cache), + capacity_of_locked_cache(&mut self.rooms.auth_chain_cache), + ), + shorteventid_cache: ( + memory_usage_of_locked_cache(&mut self.rooms.shorteventid_cache), + items_in_locked_cache(&mut self.rooms.shorteventid_cache), + capacity_of_locked_cache(&mut self.rooms.shorteventid_cache), + ), + eventidshort_cache: ( + memory_usage_of_locked_cache(&mut self.rooms.eventidshort_cache), + items_in_locked_cache(&mut self.rooms.eventidshort_cache), + capacity_of_locked_cache(&mut self.rooms.eventidshort_cache), + ), + statekeyshort_cache: ( + memory_usage_of_locked_cache(&mut self.rooms.statekeyshort_cache), + items_in_locked_cache(&mut self.rooms.statekeyshort_cache), + capacity_of_locked_cache(&mut self.rooms.statekeyshort_cache), + ), + shortstatekey_cache: ( + memory_usage_of_locked_cache(&mut self.rooms.shortstatekey_cache), + items_in_locked_cache(&mut self.rooms.shortstatekey_cache), + capacity_of_locked_cache(&mut self.rooms.shortstatekey_cache), + ), + stateinfo_cache: ( + memory_usage_of_locked_cache(&mut self.rooms.stateinfo_cache), + items_in_locked_cache(&mut self.rooms.stateinfo_cache), + capacity_of_locked_cache(&mut self.rooms.stateinfo_cache), + ), + }); } } diff --git a/src/database/admin.rs b/src/database/admin.rs index d2641a8c..9bbaa6fd 100644 --- a/src/database/admin.rs +++ b/src/database/admin.rs @@ -5,13 +5,13 @@ use std::{ use rocket::futures::{channel::mpsc, stream::StreamExt}; use ruma::{ - events::{EventType, room::message}, + events::{room::message, EventType}, UserId, }; use tokio::sync::{MutexGuard, RwLock, RwLockWriteGuard}; use tracing::warn; -use crate::{Database, pdu::PduBuilder}; +use crate::{pdu::PduBuilder, Database}; pub enum AdminCommand { RegisterAppservice(serde_yaml::Value), diff --git a/src/database/rooms.rs b/src/database/rooms.rs index 161be60e..bd5c2960 100644 --- a/src/database/rooms.rs +++ b/src/database/rooms.rs @@ -12,24 +12,24 @@ use ring::digest; use rocket::http::RawStr; use ruma::{ api::{client::error::ErrorKind, federation}, - EventId, events::{ - AnyStrippedStateEvent, AnySyncStateEvent, - EventType, - ignored_user_list, push_rules, room::{ + ignored_user_list, push_rules, + room::{ create::CreateEventContent, member, message, power_levels::PowerLevelsEventContent, }, + AnyStrippedStateEvent, AnySyncStateEvent, EventType, }, push::{self, Action, Tweak}, - RoomAliasId, - RoomId, RoomVersionId, serde::{CanonicalJsonObject, CanonicalJsonValue, Raw}, ServerName, state_res::{self, RoomVersion, StateMap}, uint, UserId, + serde::{CanonicalJsonObject, CanonicalJsonValue, Raw}, + state_res::{self, RoomVersion, StateMap}, + uint, EventId, RoomAliasId, RoomId, RoomVersionId, ServerName, UserId, }; use tokio::sync::MutexGuard; use tracing::{error, warn}; pub use edus::RoomEdus; -use crate::{Database, Error, pdu::PduBuilder, PduEvent, Result, utils}; +use crate::{pdu::PduBuilder, utils, Database, Error, PduEvent, Result}; use super::{abstraction::Tree, admin::AdminCommand, pusher};