add compaction tests and fix bugs in compaction

Signed-off-by: Alex Chi <iskyzh@gmail.com>
This commit is contained in:
Alex Chi
2024-01-25 15:25:23 +08:00
parent 971d0b1c81
commit 8dbaf54e38
23 changed files with 379 additions and 42 deletions

View File

@@ -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,
);

View File

@@ -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,