Browse Source

Don't use a vector for the key of the auth chain cache

We only ever get and insert one element in the vector
merge-requests/156/head
Kurt Roeckx 4 years ago
parent
commit
1cd16f7046
  1. 4
      src/database/rooms.rs
  2. 4
      src/server_server.rs

4
src/database/rooms.rs

@ -88,7 +88,7 @@ pub struct Rooms { @@ -88,7 +88,7 @@ pub struct Rooms {
pub(super) referencedevents: Arc<dyn Tree>,
pub(super) pdu_cache: Mutex<LruCache<EventId, Arc<PduEvent>>>,
pub(super) auth_chain_cache: Mutex<LruCache<Vec<EventId>, HashSet<EventId>>>,
pub(super) auth_chain_cache: Mutex<LruCache<EventId, HashSet<EventId>>>,
}
impl Rooms {
@ -2657,7 +2657,7 @@ impl Rooms { @@ -2657,7 +2657,7 @@ impl Rooms {
#[tracing::instrument(skip(self))]
pub fn auth_chain_cache(
&self,
) -> std::sync::MutexGuard<'_, LruCache<Vec<EventId>, HashSet<EventId>>> {
) -> std::sync::MutexGuard<'_, LruCache<EventId, HashSet<EventId>>> {
self.auth_chain_cache.lock().unwrap()
}
}

4
src/server_server.rs

@ -1760,14 +1760,14 @@ fn get_auth_chain(starting_events: Vec<EventId>, db: &Database) -> Result<HashSe @@ -1760,14 +1760,14 @@ fn get_auth_chain(starting_events: Vec<EventId>, db: &Database) -> Result<HashSe
let mut cache = db.rooms.auth_chain_cache();
for event_id in &starting_events {
if let Some(cached) = cache.get_mut(&[event_id.clone()][..]) {
if let Some(cached) = cache.get_mut(event_id) {
full_auth_chain.extend(cached.iter().cloned());
} else {
drop(cache);
let mut auth_chain = HashSet::new();
get_auth_chain_recursive(&event_id, &mut auth_chain, db)?;
cache = db.rooms.auth_chain_cache();
cache.insert(vec![event_id.clone()], auth_chain.clone());
cache.insert(event_id.clone(), auth_chain.clone());
full_auth_chain.extend(auth_chain);
};
}

Loading…
Cancel
Save