|
|
|
@ -1,3 +1,4 @@ |
|
|
|
|
|
|
|
use std::hash::Hash; |
|
|
|
use std::{ |
|
|
|
use std::{ |
|
|
|
collections::{BTreeMap, HashMap, HashSet}, |
|
|
|
collections::{BTreeMap, HashMap, HashSet}, |
|
|
|
convert::{TryFrom, TryInto}, |
|
|
|
convert::{TryFrom, TryInto}, |
|
|
|
@ -8,13 +9,12 @@ use std::{ |
|
|
|
path::Path, |
|
|
|
path::Path, |
|
|
|
sync::{Arc, Mutex, RwLock}, |
|
|
|
sync::{Arc, Mutex, RwLock}, |
|
|
|
}; |
|
|
|
}; |
|
|
|
use std::hash::Hash; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
use directories::ProjectDirs; |
|
|
|
use directories::ProjectDirs; |
|
|
|
use lru_cache::LruCache; |
|
|
|
use lru_cache::LruCache; |
|
|
|
use rocket::{ |
|
|
|
use rocket::{ |
|
|
|
futures::{channel::mpsc, stream::FuturesUnordered, StreamExt}, |
|
|
|
futures::{channel::mpsc, stream::FuturesUnordered, StreamExt}, |
|
|
|
outcome::{IntoOutcome, try_outcome}, |
|
|
|
outcome::{try_outcome, IntoOutcome}, |
|
|
|
request::{FromRequest, Request}, |
|
|
|
request::{FromRequest, Request}, |
|
|
|
Shutdown, State, |
|
|
|
Shutdown, State, |
|
|
|
}; |
|
|
|
}; |
|
|
|
@ -25,7 +25,7 @@ use tracing::{debug, error, warn}; |
|
|
|
|
|
|
|
|
|
|
|
use abstraction::DatabaseEngine; |
|
|
|
use abstraction::DatabaseEngine; |
|
|
|
|
|
|
|
|
|
|
|
use crate::{Error, Result, utils}; |
|
|
|
use crate::{utils, Error, Result}; |
|
|
|
|
|
|
|
|
|
|
|
use self::proxy::ProxyConfig; |
|
|
|
use self::proxy::ProxyConfig; |
|
|
|
|
|
|
|
|
|
|
|
@ -916,8 +916,7 @@ impl Database { |
|
|
|
_ = s.recv() => { |
|
|
|
_ = s.recv() => { |
|
|
|
info!("wal-trunc: Received SIGHUP"); |
|
|
|
info!("wal-trunc: Received SIGHUP"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
; |
|
|
|
|
|
|
|
#[cfg(not(unix))] |
|
|
|
#[cfg(not(unix))] |
|
|
|
{ |
|
|
|
{ |
|
|
|
i.tick().await; |
|
|
|
i.tick().await; |
|
|
|
@ -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.
|
|
|
|
/// 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<CacheUsageStatistics> { |
|
|
|
pub fn get_cache_usage(&mut self) -> Result<CacheUsageStatistics> { |
|
|
|
fn memory_usage_of_locked_cache<K: Eq + Hash, V>(cache: &mut Mutex<LruCache<K, V>>) -> usize { |
|
|
|
fn memory_usage_of_locked_cache<K: Eq + Hash, V>( |
|
|
|
|
|
|
|
cache: &mut Mutex<LruCache<K, V>>, |
|
|
|
|
|
|
|
) -> usize { |
|
|
|
let raw_cache = cache.lock().unwrap(); |
|
|
|
let raw_cache = cache.lock().unwrap(); |
|
|
|
let mut cache_items_size_sum: usize = 0; |
|
|
|
let mut cache_items_size_sum: usize = 0; |
|
|
|
for cache_item in raw_cache.iter() { |
|
|
|
for cache_item in raw_cache.iter() { |
|
|
|
@ -953,42 +954,41 @@ impl Database { |
|
|
|
cache.lock().unwrap().capacity() |
|
|
|
cache.lock().unwrap().capacity() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return |
|
|
|
return Ok(CacheUsageStatistics { |
|
|
|
Ok(CacheUsageStatistics { |
|
|
|
|
|
|
|
pdu_cache: ( |
|
|
|
pdu_cache: ( |
|
|
|
memory_usage_of_locked_cache(&mut self.rooms.pdu_cache), |
|
|
|
memory_usage_of_locked_cache(&mut self.rooms.pdu_cache), |
|
|
|
items_in_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) |
|
|
|
capacity_of_locked_cache(&mut self.rooms.pdu_cache), |
|
|
|
), |
|
|
|
), |
|
|
|
auth_chain_cache: ( |
|
|
|
auth_chain_cache: ( |
|
|
|
memory_usage_of_locked_cache(&mut self.rooms.auth_chain_cache), |
|
|
|
memory_usage_of_locked_cache(&mut self.rooms.auth_chain_cache), |
|
|
|
items_in_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) |
|
|
|
capacity_of_locked_cache(&mut self.rooms.auth_chain_cache), |
|
|
|
), |
|
|
|
), |
|
|
|
shorteventid_cache: ( |
|
|
|
shorteventid_cache: ( |
|
|
|
memory_usage_of_locked_cache(&mut self.rooms.shorteventid_cache), |
|
|
|
memory_usage_of_locked_cache(&mut self.rooms.shorteventid_cache), |
|
|
|
items_in_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) |
|
|
|
capacity_of_locked_cache(&mut self.rooms.shorteventid_cache), |
|
|
|
), |
|
|
|
), |
|
|
|
eventidshort_cache: ( |
|
|
|
eventidshort_cache: ( |
|
|
|
memory_usage_of_locked_cache(&mut self.rooms.eventidshort_cache), |
|
|
|
memory_usage_of_locked_cache(&mut self.rooms.eventidshort_cache), |
|
|
|
items_in_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) |
|
|
|
capacity_of_locked_cache(&mut self.rooms.eventidshort_cache), |
|
|
|
), |
|
|
|
), |
|
|
|
statekeyshort_cache: ( |
|
|
|
statekeyshort_cache: ( |
|
|
|
memory_usage_of_locked_cache(&mut self.rooms.statekeyshort_cache), |
|
|
|
memory_usage_of_locked_cache(&mut self.rooms.statekeyshort_cache), |
|
|
|
items_in_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) |
|
|
|
capacity_of_locked_cache(&mut self.rooms.statekeyshort_cache), |
|
|
|
), |
|
|
|
), |
|
|
|
shortstatekey_cache: ( |
|
|
|
shortstatekey_cache: ( |
|
|
|
memory_usage_of_locked_cache(&mut self.rooms.shortstatekey_cache), |
|
|
|
memory_usage_of_locked_cache(&mut self.rooms.shortstatekey_cache), |
|
|
|
items_in_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) |
|
|
|
capacity_of_locked_cache(&mut self.rooms.shortstatekey_cache), |
|
|
|
), |
|
|
|
), |
|
|
|
stateinfo_cache: ( |
|
|
|
stateinfo_cache: ( |
|
|
|
memory_usage_of_locked_cache(&mut self.rooms.stateinfo_cache), |
|
|
|
memory_usage_of_locked_cache(&mut self.rooms.stateinfo_cache), |
|
|
|
items_in_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) |
|
|
|
capacity_of_locked_cache(&mut self.rooms.stateinfo_cache), |
|
|
|
), |
|
|
|
), |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|