From d777d5313d963fff930edd5d2778377109e842f8 Mon Sep 17 00:00:00 2001 From: pedrinfx Date: Wed, 18 Jan 2023 10:16:15 -0300 Subject: [PATCH] refactor: refactoring flush --- src/storage/lsm/mod.rs | 74 ++++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/src/storage/lsm/mod.rs b/src/storage/lsm/mod.rs index 126390a..4ccea01 100644 --- a/src/storage/lsm/mod.rs +++ b/src/storage/lsm/mod.rs @@ -85,25 +85,29 @@ impl Lsm { let memtable = c_mem.lock().unwrap(); let mut dense_index = c_den.lock().unwrap(); - if memtable.len() > 0 { + if memtable.is_empty() { if c_config.verbose { - logs!("Flushing memtable to disk..."); + logs!("No data to flush."); } - let segments = - sstable::Segment::from_tree(memtable.deref(), c_config.sstable_path.as_str()); + std::process::exit(0); + } - for token in segments.1 { - dense_index.insert(token.0, token.1); - } + if c_config.verbose { + logs!("Flushing memtable to disk..."); + } - let mut keys = Vec::new(); + let segments = + sstable::Segment::from_tree(memtable.deref(), c_config.sstable_path.as_str()); - for segment in dense_index.deref() { - keys.push(segment.0.clone()); - } - } else if c_config.verbose { - logs!("No data to flush."); + for token in segments.1 { + dense_index.insert(token.0, token.1); + } + + let mut keys = Vec::new(); + + for segment in dense_index.deref() { + keys.push(segment.0.clone()); } index::write_index(&c_config.sstable_path, dense_index.deref()); @@ -205,16 +209,20 @@ impl Lsm { } pub fn flush(&mut self) -> Result<()> { + let memtable = self.get_memtable(); + if self.lsm_config.verbose { logs!("Flushing memtable to disk..."); } + if memtable.is_empty() { + return Ok(()); + } + let mut dense_index = self.dense_index.lock().unwrap(); - let segments = sstable::Segment::from_tree( - &self.get_memtable(), - self.lsm_config.sstable_path.as_str(), - ); + let segments = + sstable::Segment::from_tree(&memtable, self.lsm_config.sstable_path.as_str()); for token in segments.1 { dense_index.insert(token.0, token.1); @@ -298,27 +306,29 @@ impl Drop for Lsm { logs!("LSM is being dropped."); } - if memtable.len() > 0 { + if memtable.is_empty() { if self.lsm_config.verbose { - logs!("Flushing memtable to disk."); + logs!("No memtable to flush to disk."); } - let segments = sstable::Segment::from_tree( - memtable.deref(), - self.lsm_config.sstable_path.as_str(), - ); + return; + } - for token in segments.1 { - dense_index.insert(token.0, token.1); - } + if self.lsm_config.verbose { + logs!("Flushing memtable to disk."); + } - let mut keys = Vec::new(); + let segments = + sstable::Segment::from_tree(memtable.deref(), self.lsm_config.sstable_path.as_str()); - for segment in dense_index.deref() { - keys.push(segment.0.clone()); - } - } else if self.lsm_config.verbose { - logs!("No memtable to flush to disk."); + for token in segments.1 { + dense_index.insert(token.0, token.1); + } + + let mut keys = Vec::new(); + + for segment in dense_index.deref() { + keys.push(segment.0.clone()); } index::write_index(&self.lsm_config.sstable_path, dense_index.deref());