Signed-off-by: Alex Chi <iskyzh@gmail.com>
This commit is contained in:
Alex Chi
2024-01-18 15:15:51 +08:00
parent 714bfc60e9
commit 9620a57211
5 changed files with 26 additions and 15 deletions

View File

@@ -9,7 +9,11 @@ Build a simple key-value storage engine in a week!
The tutorial is available at [https://skyzh.github.io/mini-lsm](https://skyzh.github.io/mini-lsm). You can use the provided starter The tutorial is available at [https://skyzh.github.io/mini-lsm](https://skyzh.github.io/mini-lsm). You can use the provided starter
code to kick off your project, and follow the tutorial to implement the LSM tree. code to kick off your project, and follow the tutorial to implement the LSM tree.
Join the mini-lsm community: [![Join skyzh's Discord Server](https://dcbadge.vercel.app/api/server/ZgXzxpua3H)](https://skyzh.dev/join/discord) ## Community
You may join skyzh's Discord server and study with the mini-lsm community.
[![Join skyzh's Discord Server](https://dcbadge.vercel.app/api/server/ZgXzxpua3H)](https://skyzh.dev/join/discord)
## Development ## Development

View File

@@ -218,6 +218,9 @@ impl LsmStorage {
let iter = TwoMergeIterator::create(memtable_iter, table_iter)?; let iter = TwoMergeIterator::create(memtable_iter, table_iter)?;
Ok(FusedIterator::new(LsmIterator::new(iter, map_bound(upper))?)) Ok(FusedIterator::new(LsmIterator::new(
iter,
map_bound(upper),
)?))
} }
} }

View File

@@ -37,7 +37,9 @@ impl LsmStorage {
let mut iters = Vec::new(); let mut iters = Vec::new();
iters.reserve(tables.len()); iters.reserve(tables.len());
for table in tables.iter() { for table in tables.iter() {
iters.push(Box::new(SsTableIterator::create_and_seek_to_first(table.clone())?)); iters.push(Box::new(SsTableIterator::create_and_seek_to_first(
table.clone(),
)?));
} }
let mut iter = MergeIterator::create(iters); let mut iter = MergeIterator::create(iters);

View File

@@ -166,17 +166,16 @@ impl LeveledCompactionController {
.copied() .copied()
.collect::<HashSet<_>>(); .collect::<HashSet<_>>();
if let Some(upper_level) = task.upper_level { if let Some(upper_level) = task.upper_level {
let new_upper_level_ssts = let new_upper_level_ssts = snapshot.levels[upper_level - 1]
snapshot.levels[upper_level - 1] .1
.1 .iter()
.iter() .filter_map(|x| {
.filter_map(|x| { if upper_level_sst_ids_set.remove(x) {
if upper_level_sst_ids_set.remove(x) { return None;
return None; }
} Some(*x)
Some(*x) })
}) .collect::<Vec<_>>();
.collect::<Vec<_>>();
assert!(upper_level_sst_ids_set.is_empty()); assert!(upper_level_sst_ids_set.is_empty());
snapshot.levels[upper_level - 1].1 = new_upper_level_ssts; snapshot.levels[upper_level - 1].1 = new_upper_level_ssts;
} else { } else {

View File

@@ -223,6 +223,9 @@ impl LsmStorage {
let iter = TwoMergeIterator::create(memtable_iter, table_iter)?; let iter = TwoMergeIterator::create(memtable_iter, table_iter)?;
Ok(FusedIterator::new(LsmIterator::new(iter, map_bound(upper))?)) Ok(FusedIterator::new(LsmIterator::new(
iter,
map_bound(upper),
)?))
} }
} }