@@ -11,10 +11,10 @@ use crate::{
|
||||
CompactionOptions, LeveledCompactionOptions, SimpleLeveledCompactionOptions,
|
||||
TieredCompactionOptions,
|
||||
},
|
||||
iterators::StorageIterator,
|
||||
iterators::{merge_iterator::MergeIterator, StorageIterator},
|
||||
key::{KeySlice, TS_ENABLED},
|
||||
lsm_storage::{BlockCache, LsmStorageInner, MiniLsm},
|
||||
table::{SsTable, SsTableBuilder},
|
||||
lsm_storage::{BlockCache, LsmStorageInner, LsmStorageState, MiniLsm},
|
||||
table::{SsTable, SsTableBuilder, SsTableIterator},
|
||||
};
|
||||
|
||||
#[derive(Clone)]
|
||||
@@ -411,3 +411,24 @@ pub fn dump_files_in_dir(path: impl AsRef<Path>) {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn construct_merge_iterator_over_storage(
|
||||
state: &LsmStorageState,
|
||||
) -> MergeIterator<SsTableIterator> {
|
||||
let mut iters = Vec::new();
|
||||
for t in &state.l0_sstables {
|
||||
iters.push(Box::new(
|
||||
SsTableIterator::create_and_seek_to_first(state.sstables.get(t).cloned().unwrap())
|
||||
.unwrap(),
|
||||
));
|
||||
}
|
||||
for (_, files) in &state.levels {
|
||||
for f in files {
|
||||
iters.push(Box::new(
|
||||
SsTableIterator::create_and_seek_to_first(state.sstables.get(f).cloned().unwrap())
|
||||
.unwrap(),
|
||||
));
|
||||
}
|
||||
}
|
||||
MergeIterator::create(iters)
|
||||
}
|
||||
|
@@ -3,6 +3,7 @@ use std::{ops::Bound, path::Path, sync::Arc};
|
||||
use self::harness::{check_iter_result_by_key, check_lsm_iter_result_by_key, sync};
|
||||
use bytes::Bytes;
|
||||
use tempfile::tempdir;
|
||||
use week2_day1::harness::construct_merge_iterator_over_storage;
|
||||
|
||||
use super::*;
|
||||
use crate::{
|
||||
@@ -14,27 +15,6 @@ use crate::{
|
||||
table::{SsTable, SsTableBuilder, SsTableIterator},
|
||||
};
|
||||
|
||||
fn construct_merge_iterator_over_storage(
|
||||
state: &LsmStorageState,
|
||||
) -> MergeIterator<SsTableIterator> {
|
||||
let mut iters = Vec::new();
|
||||
for t in &state.l0_sstables {
|
||||
iters.push(Box::new(
|
||||
SsTableIterator::create_and_seek_to_first(state.sstables.get(t).cloned().unwrap())
|
||||
.unwrap(),
|
||||
));
|
||||
}
|
||||
for (_, files) in &state.levels {
|
||||
for f in files {
|
||||
iters.push(Box::new(
|
||||
SsTableIterator::create_and_seek_to_first(state.sstables.get(f).cloned().unwrap())
|
||||
.unwrap(),
|
||||
));
|
||||
}
|
||||
}
|
||||
MergeIterator::create(iters)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_task1_full_compaction() {
|
||||
// We do not use LSM iterator in this test because it's implemented as part of task 3
|
||||
|
Reference in New Issue
Block a user