Skip to content

Commit d777d53

Browse files
committed
refactor: refactoring flush
1 parent db8a635 commit d777d53

1 file changed

Lines changed: 42 additions & 32 deletions

File tree

src/storage/lsm/mod.rs

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -85,25 +85,29 @@ impl Lsm {
8585
let memtable = c_mem.lock().unwrap();
8686
let mut dense_index = c_den.lock().unwrap();
8787

88-
if memtable.len() > 0 {
88+
if memtable.is_empty() {
8989
if c_config.verbose {
90-
logs!("Flushing memtable to disk...");
90+
logs!("No data to flush.");
9191
}
9292

93-
let segments =
94-
sstable::Segment::from_tree(memtable.deref(), c_config.sstable_path.as_str());
93+
std::process::exit(0);
94+
}
9595

96-
for token in segments.1 {
97-
dense_index.insert(token.0, token.1);
98-
}
96+
if c_config.verbose {
97+
logs!("Flushing memtable to disk...");
98+
}
9999

100-
let mut keys = Vec::new();
100+
let segments =
101+
sstable::Segment::from_tree(memtable.deref(), c_config.sstable_path.as_str());
101102

102-
for segment in dense_index.deref() {
103-
keys.push(segment.0.clone());
104-
}
105-
} else if c_config.verbose {
106-
logs!("No data to flush.");
103+
for token in segments.1 {
104+
dense_index.insert(token.0, token.1);
105+
}
106+
107+
let mut keys = Vec::new();
108+
109+
for segment in dense_index.deref() {
110+
keys.push(segment.0.clone());
107111
}
108112

109113
index::write_index(&c_config.sstable_path, dense_index.deref());
@@ -205,16 +209,20 @@ impl Lsm {
205209
}
206210

207211
pub fn flush(&mut self) -> Result<()> {
212+
let memtable = self.get_memtable();
213+
208214
if self.lsm_config.verbose {
209215
logs!("Flushing memtable to disk...");
210216
}
211217

218+
if memtable.is_empty() {
219+
return Ok(());
220+
}
221+
212222
let mut dense_index = self.dense_index.lock().unwrap();
213223

214-
let segments = sstable::Segment::from_tree(
215-
&self.get_memtable(),
216-
self.lsm_config.sstable_path.as_str(),
217-
);
224+
let segments =
225+
sstable::Segment::from_tree(&memtable, self.lsm_config.sstable_path.as_str());
218226

219227
for token in segments.1 {
220228
dense_index.insert(token.0, token.1);
@@ -298,27 +306,29 @@ impl Drop for Lsm {
298306
logs!("LSM is being dropped.");
299307
}
300308

301-
if memtable.len() > 0 {
309+
if memtable.is_empty() {
302310
if self.lsm_config.verbose {
303-
logs!("Flushing memtable to disk.");
311+
logs!("No memtable to flush to disk.");
304312
}
305313

306-
let segments = sstable::Segment::from_tree(
307-
memtable.deref(),
308-
self.lsm_config.sstable_path.as_str(),
309-
);
314+
return;
315+
}
310316

311-
for token in segments.1 {
312-
dense_index.insert(token.0, token.1);
313-
}
317+
if self.lsm_config.verbose {
318+
logs!("Flushing memtable to disk.");
319+
}
314320

315-
let mut keys = Vec::new();
321+
let segments =
322+
sstable::Segment::from_tree(memtable.deref(), self.lsm_config.sstable_path.as_str());
316323

317-
for segment in dense_index.deref() {
318-
keys.push(segment.0.clone());
319-
}
320-
} else if self.lsm_config.verbose {
321-
logs!("No memtable to flush to disk.");
324+
for token in segments.1 {
325+
dense_index.insert(token.0, token.1);
326+
}
327+
328+
let mut keys = Vec::new();
329+
330+
for segment in dense_index.deref() {
331+
keys.push(segment.0.clone());
322332
}
323333

324334
index::write_index(&self.lsm_config.sstable_path, dense_index.deref());

0 commit comments

Comments
 (0)