implement mvcc compaction + snapshot
Signed-off-by: Alex Chi <iskyzh@gmail.com>
This commit is contained in:
29
mini-lsm-mvcc/src/mvcc/watermark.rs
Normal file
29
mini-lsm-mvcc/src/mvcc/watermark.rs
Normal file
@@ -0,0 +1,29 @@
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
pub struct Watermark {
|
||||
readers: BTreeMap<u64, usize>,
|
||||
}
|
||||
|
||||
impl Watermark {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
readers: BTreeMap::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn add_reader(&mut self, ts: u64) {
|
||||
*self.readers.entry(ts).or_default() += 1;
|
||||
}
|
||||
|
||||
pub fn remove_reader(&mut self, ts: u64) {
|
||||
let cnt = self.readers.get_mut(&ts).unwrap();
|
||||
*cnt -= 1;
|
||||
if *cnt == 0 {
|
||||
self.readers.remove(&ts);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn watermark(&self) -> Option<u64> {
|
||||
self.readers.first_key_value().map(|(ts, _)| *ts)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user