mirror of
https://gitlab.com/famedly/conduit.git
synced 2024-11-04 17:18:51 +01:00
improvement: state info cache
This commit is contained in:
parent
5bd5b41c70
commit
a4310f840e
2 changed files with 24 additions and 0 deletions
|
@ -278,6 +278,7 @@ impl Database {
|
|||
pdu_cache: Mutex::new(LruCache::new(100_000)),
|
||||
auth_chain_cache: Mutex::new(LruCache::new(100_000)),
|
||||
shorteventid_cache: Mutex::new(LruCache::new(1_000_000)),
|
||||
stateinfo_cache: Mutex::new(LruCache::new(1000)),
|
||||
},
|
||||
account_data: account_data::AccountData {
|
||||
roomuserdataid_accountdata: builder.open_tree("roomuserdataid_accountdata")?,
|
||||
|
|
|
@ -92,6 +92,13 @@ pub struct Rooms {
|
|||
pub(super) pdu_cache: Mutex<LruCache<EventId, Arc<PduEvent>>>,
|
||||
pub(super) auth_chain_cache: Mutex<LruCache<u64, HashSet<u64>>>,
|
||||
pub(super) shorteventid_cache: Mutex<LruCache<u64, EventId>>,
|
||||
pub(super) stateinfo_cache: Mutex<LruCache<u64,
|
||||
Vec<(
|
||||
u64, // sstatehash
|
||||
HashSet<CompressedStateEvent>, // full state
|
||||
HashSet<CompressedStateEvent>, // added
|
||||
HashSet<CompressedStateEvent>, // removed
|
||||
)>>>,
|
||||
}
|
||||
|
||||
impl Rooms {
|
||||
|
@ -407,6 +414,14 @@ impl Rooms {
|
|||
HashSet<CompressedStateEvent>, // removed
|
||||
)>,
|
||||
> {
|
||||
if let Some(r) = self.stateinfo_cache
|
||||
.lock()
|
||||
.unwrap()
|
||||
.get_mut(&shortstatehash)
|
||||
{
|
||||
return Ok(r.clone());
|
||||
}
|
||||
|
||||
let value = self
|
||||
.shortstatehash_statediff
|
||||
.get(&shortstatehash.to_be_bytes())?
|
||||
|
@ -443,10 +458,18 @@ impl Rooms {
|
|||
|
||||
response.push((shortstatehash, state, added, removed));
|
||||
|
||||
self.stateinfo_cache
|
||||
.lock()
|
||||
.unwrap()
|
||||
.insert(shortstatehash, response.clone());
|
||||
Ok(response)
|
||||
} else {
|
||||
let mut response = Vec::new();
|
||||
response.push((shortstatehash, added.clone(), added, removed));
|
||||
self.stateinfo_cache
|
||||
.lock()
|
||||
.unwrap()
|
||||
.insert(shortstatehash, response.clone());
|
||||
Ok(response)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue