use std::time::Duration;
use crabka_compression::CompressionType;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum CleanupPolicy {
#[default]
Delete,
Compact,
}
#[derive(Debug, Clone)]
pub struct LogConfig {
pub segment_bytes: u64,
pub segment_ms: Duration,
pub retention_ms: Option<Duration>,
pub retention_bytes: Option<u64>,
pub index_interval_bytes: u32,
pub flush_on_append: bool,
pub validate_on_open: bool,
pub cleanup_policy: CleanupPolicy,
pub compression_type: Option<CompressionType>,
pub remote_storage_enable: bool,
pub local_retention_ms: Option<Duration>,
pub local_retention_bytes: Option<u64>,
}
impl Default for LogConfig {
fn default() -> Self {
Self {
segment_bytes: 1024 * 1024 * 1024,
segment_ms: Duration::from_hours(7 * 24),
retention_ms: Some(Duration::from_hours(7 * 24)),
retention_bytes: None,
index_interval_bytes: 4096,
flush_on_append: false,
validate_on_open: true,
cleanup_policy: CleanupPolicy::Delete,
compression_type: None,
remote_storage_enable: false,
local_retention_ms: None,
local_retention_bytes: None,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use assert2::assert;
#[test]
fn defaults_match_kafka_4x() {
let c = LogConfig::default();
assert!(c.segment_bytes == 1 << 30);
assert!(c.index_interval_bytes == 4096);
assert!(!c.flush_on_append);
assert!(c.validate_on_open);
}
#[test]
fn default_cleanup_policy_is_delete() {
let c = LogConfig::default();
assert!(c.cleanup_policy == CleanupPolicy::Delete);
}
#[test]
fn default_compression_is_producer_passthrough() {
let c = LogConfig::default();
assert!(c.compression_type == None);
}
#[test]
fn default_local_retention_is_none() {
let c = LogConfig::default();
assert!(c.local_retention_ms == None);
assert!(c.local_retention_bytes == None);
}
}