use std::path::PathBuf;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SyncMode {
Strict,
BatchOnly,
Async,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ReadStrategy {
StandardIo,
Mmap,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CompressionType {
None,
#[cfg(feature = "compression")]
Lz4,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CorruptionPolicy {
Truncate,
Error,
}
#[derive(Debug, Clone)]
pub struct WalOptions {
pub root_path: PathBuf,
pub max_segment_size: u64,
pub max_entries_per_segment: u64,
pub max_open_segments: usize,
pub write_buffer_size: usize,
pub read_buffer_size: usize,
pub block_cache_size: Option<u64>,
pub sync_mode: SyncMode,
pub compression: CompressionType,
pub read_strategy: ReadStrategy,
pub on_corruption: CorruptionPolicy,
pub min_compression_size: usize,
}
impl Default for WalOptions {
fn default() -> Self {
Self {
root_path: PathBuf::from("./wal_data"),
max_segment_size: 64 * 1024 * 1024, max_entries_per_segment: u64::MAX,
max_open_segments: 128,
write_buffer_size: 64 * 1024, read_buffer_size: 128 * 1024, block_cache_size: None,
sync_mode: SyncMode::Strict,
compression: CompressionType::None,
read_strategy: ReadStrategy::StandardIo,
on_corruption: CorruptionPolicy::Truncate,
min_compression_size: 1024, }
}
}
impl WalOptions {
pub fn new(path: impl Into<PathBuf>) -> Self {
Self {
root_path: path.into(),
..Default::default()
}
}
}