Browse Source

add timed flush logic

merge-requests/107/merge^2
Tglman 5 years ago
parent
commit
7c8b05c3bf
  1. 20
      src/database/abstraction.rs

20
src/database/abstraction.rs

@ -7,7 +7,12 @@ use std::{future::Future, pin::Pin, sync::Arc};
use std::{collections::BTreeMap, sync::RwLock}; use std::{collections::BTreeMap, sync::RwLock};
#[cfg(feature = "persy")] #[cfg(feature = "persy")]
use std::{cmp::Ordering, collections::BTreeSet, iter::Peekable}; use std::{
cmp::Ordering,
collections::BTreeSet,
iter::Peekable,
time::{Duration, Instant},
};
#[cfg(feature = "sled")] #[cfg(feature = "sled")]
pub mod sled; pub mod sled;
@ -89,6 +94,7 @@ impl DatabaseEngine for PersyEngine {
add_cache: Default::default(), add_cache: Default::default(),
remove_cache: Default::default(), remove_cache: Default::default(),
changes_count: Default::default(), changes_count: Default::default(),
last_flush: Instant::now(),
db: persy.clone(), db: persy.clone(),
})); }));
Ok(Arc::new(PersyEngine(persy, write_cache))) Ok(Arc::new(PersyEngine(persy, write_cache)))
@ -124,6 +130,7 @@ pub struct WriteCache {
add_cache: BTreeMap<String, BTreeMap<Vec<u8>, Vec<u8>>>, add_cache: BTreeMap<String, BTreeMap<Vec<u8>, Vec<u8>>>,
remove_cache: BTreeMap<String, BTreeSet<Vec<u8>>>, remove_cache: BTreeMap<String, BTreeSet<Vec<u8>>>,
changes_count: i32, changes_count: i32,
last_flush: Instant,
db: persy::Persy, db: persy::Persy,
} }
@ -228,6 +235,7 @@ impl WriteCache {
} }
self.remove_cache.clear(); self.remove_cache.clear();
tx.prepare()?.commit()?; tx.prepare()?.commit()?;
self.last_flush = Instant::now();
Ok(()) Ok(())
} }
@ -318,6 +326,16 @@ impl WriteCache {
} }
iter iter
} }
#[allow(unused)]
pub fn flush_timed(&mut self) -> Result<()> {
if self.changes_count > 0 {
if Instant::now() - self.last_flush > Duration::from_secs(2) {
self.flush_changes()?;
}
}
Ok(())
}
} }
#[cfg(feature = "persy")] #[cfg(feature = "persy")]

Loading…
Cancel
Save