@@ -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
|
||||
code to kick off your project, and follow the tutorial to implement the LSM tree.
|
||||
|
||||
Join the mini-lsm community: [](https://skyzh.dev/join/discord)
|
||||
## Community
|
||||
|
||||
You may join skyzh's Discord server and study with the mini-lsm community.
|
||||
|
||||
[](https://skyzh.dev/join/discord)
|
||||
|
||||
## Development
|
||||
|
||||
|
@@ -218,6 +218,9 @@ impl LsmStorage {
|
||||
|
||||
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),
|
||||
)?))
|
||||
}
|
||||
}
|
||||
|
@@ -37,7 +37,9 @@ impl LsmStorage {
|
||||
let mut iters = Vec::new();
|
||||
iters.reserve(tables.len());
|
||||
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);
|
||||
|
||||
|
@@ -166,17 +166,16 @@ impl LeveledCompactionController {
|
||||
.copied()
|
||||
.collect::<HashSet<_>>();
|
||||
if let Some(upper_level) = task.upper_level {
|
||||
let new_upper_level_ssts =
|
||||
snapshot.levels[upper_level - 1]
|
||||
.1
|
||||
.iter()
|
||||
.filter_map(|x| {
|
||||
if upper_level_sst_ids_set.remove(x) {
|
||||
return None;
|
||||
}
|
||||
Some(*x)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
let new_upper_level_ssts = snapshot.levels[upper_level - 1]
|
||||
.1
|
||||
.iter()
|
||||
.filter_map(|x| {
|
||||
if upper_level_sst_ids_set.remove(x) {
|
||||
return None;
|
||||
}
|
||||
Some(*x)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
assert!(upper_level_sst_ids_set.is_empty());
|
||||
snapshot.levels[upper_level - 1].1 = new_upper_level_ssts;
|
||||
} else {
|
||||
|
@@ -223,6 +223,9 @@ impl LsmStorage {
|
||||
|
||||
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),
|
||||
)?))
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user