add compaction tests and fix bugs in compaction
Signed-off-by: Alex Chi <iskyzh@gmail.com>
This commit is contained in:
@@ -124,11 +124,11 @@ impl LeveledCompactionController {
|
||||
"target level sizes: {:?}, real level sizes: {:?}, base_level: {}",
|
||||
target_level_size
|
||||
.iter()
|
||||
.map(|x| format!("{}MB", x / 1024 / 1024))
|
||||
.map(|x| format!("{:.3}MB", *x as f64 / 1024.0 / 1024.0))
|
||||
.collect::<Vec<_>>(),
|
||||
real_level_size
|
||||
.iter()
|
||||
.map(|x| format!("{}MB", x / 1024 / 1024))
|
||||
.map(|x| format!("{:.3}MB", *x as f64 / 1024.0 / 1024.0))
|
||||
.collect::<Vec<_>>(),
|
||||
base_level,
|
||||
);
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
use std::collections::HashSet;
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::lsm_storage::LsmStorageState;
|
||||
@@ -95,12 +97,20 @@ impl SimpleLeveledCompactionController {
|
||||
files_to_remove.extend(&snapshot.levels[upper_level - 1].1);
|
||||
snapshot.levels[upper_level - 1].1.clear();
|
||||
} else {
|
||||
assert_eq!(
|
||||
task.upper_level_sst_ids, snapshot.l0_sstables,
|
||||
"sst mismatched"
|
||||
);
|
||||
files_to_remove.extend(&snapshot.l0_sstables);
|
||||
snapshot.l0_sstables.clear();
|
||||
files_to_remove.extend(&task.upper_level_sst_ids);
|
||||
let mut l0_ssts_compacted = task
|
||||
.upper_level_sst_ids
|
||||
.iter()
|
||||
.copied()
|
||||
.collect::<HashSet<_>>();
|
||||
let new_l0_sstables = snapshot
|
||||
.l0_sstables
|
||||
.iter()
|
||||
.copied()
|
||||
.filter(|x| !l0_ssts_compacted.remove(x))
|
||||
.collect::<Vec<_>>();
|
||||
assert!(l0_ssts_compacted.is_empty());
|
||||
snapshot.l0_sstables = new_l0_sstables;
|
||||
}
|
||||
assert_eq!(
|
||||
task.lower_level_sst_ids,
|
||||
|
||||
Reference in New Issue
Block a user