From 30da00c517c905e4e97083b90be352bf11f9a6da Mon Sep 17 00:00:00 2001 From: Alex Chi Z Date: Tue, 30 Jan 2024 17:14:45 +0800 Subject: [PATCH] fix leveled compaction tests Signed-off-by: Alex Chi Z --- mini-lsm-mvcc/src/compact/leveled.rs | 15 +++++++++++++++ mini-lsm/src/tests/harness.rs | 20 +++++++++----------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/mini-lsm-mvcc/src/compact/leveled.rs b/mini-lsm-mvcc/src/compact/leveled.rs index 2136618..ac3097f 100644 --- a/mini-lsm-mvcc/src/compact/leveled.rs +++ b/mini-lsm-mvcc/src/compact/leveled.rs @@ -118,6 +118,21 @@ impl LeveledCompactionController { } } priorities.sort_by(|a, b| a.partial_cmp(b).unwrap().reverse()); + + println!( + "target level sizes: {:?}, real level sizes: {:?}, base_level: {}", + target_level_size + .iter() + .map(|x| format!("{:.3}MB", *x as f64 / 1024.0 / 1024.0)) + .collect::>(), + real_level_size + .iter() + .map(|x| format!("{:.3}MB", *x as f64 / 1024.0 / 1024.0)) + .collect::>(), + base_level, + ); + println!("compaction triggered by priority: {:?}", priorities); + let priority = priorities.first(); if let Some((_, level)) = priority { println!( diff --git a/mini-lsm/src/tests/harness.rs b/mini-lsm/src/tests/harness.rs index afbe8db..a0e68aa 100644 --- a/mini-lsm/src/tests/harness.rs +++ b/mini-lsm/src/tests/harness.rs @@ -338,21 +338,19 @@ pub fn check_compaction_ratio(storage: Arc) { }) => { assert!(l0_sst_num < level0_file_num_compaction_trigger); assert!(level_size.len() <= max_levels); - for idx in 1..level_size.len() { - let prev_size = level_size[idx - 1]; - let this_size = level_size[idx]; - if this_size == 0 { - continue; - } + let last_level_size = *level_size.last().unwrap(); + let mut multiplier = 1.0; + for idx in (1..level_size.len()).rev() { + multiplier *= level_size_multiplier as f64; + let this_size = level_size[idx - 1]; assert!( // do not add hard requirement on level size multiplier considering bloom filters... - this_size as f64 / prev_size as f64 >= (level_size_multiplier as f64 - 0.5), - "L{}/L{}, {}/{}<<{}", - state.levels[idx].0, + this_size as f64 / last_level_size as f64 <= 1.0 / multiplier + 0.5, + "L{}/L_max, {}/{}>>1.0/{}", state.levels[idx - 1].0, this_size, - prev_size, - level_size_multiplier + last_level_size, + multiplier ); } assert!(