use kimberlite_types::CompressionKind;
#[derive(Debug, Clone)]
pub struct CompactionConfig {
pub min_segments: usize,
pub merge_threshold_bytes: u64,
pub compress_on_compact: bool,
pub compression: CompressionKind,
}
impl Default for CompactionConfig {
fn default() -> Self {
Self {
min_segments: 4,
merge_threshold_bytes: 128 * 1024 * 1024, compress_on_compact: false,
compression: CompressionKind::None,
}
}
}
#[derive(Debug, Clone)]
pub struct CompactionResult {
pub segments_before: usize,
pub segments_after: usize,
pub bytes_reclaimed: u64,
pub tombstones_removed: u64,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_config() {
let config = CompactionConfig::default();
assert_eq!(config.min_segments, 4);
assert_eq!(config.merge_threshold_bytes, 128 * 1024 * 1024);
assert!(!config.compress_on_compact);
assert_eq!(config.compression, CompressionKind::None);
}
#[test]
fn compaction_result_fields() {
let result = CompactionResult {
segments_before: 8,
segments_after: 2,
bytes_reclaimed: 512_000,
tombstones_removed: 42,
};
assert_eq!(result.segments_before, 8);
assert_eq!(result.segments_after, 2);
assert_eq!(result.bytes_reclaimed, 512_000);
assert_eq!(result.tombstones_removed, 42);
}
}