const DEFAULT_INFLIGHT_SLOTS: usize = 256;
const DEFAULT_BUFFER_SIZE: usize = 16 * 1024 * 1024;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FsyncPolicy {
Always,
Deferred,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct WalConfig {
pub buffer_size: usize,
pub page_size: usize,
pub inflight_slots: usize,
pub fsync: FsyncPolicy,
}
impl Default for WalConfig {
fn default() -> Self {
Self {
buffer_size: DEFAULT_BUFFER_SIZE,
page_size: DEFAULT_BUFFER_SIZE,
inflight_slots: DEFAULT_INFLIGHT_SLOTS,
fsync: FsyncPolicy::Always,
}
}
}
impl WalConfig {
pub const fn new(buffer_size: usize) -> Self {
Self {
buffer_size,
page_size: buffer_size,
inflight_slots: DEFAULT_INFLIGHT_SLOTS,
fsync: FsyncPolicy::Always,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_fsync_is_always() {
assert_eq!(WalConfig::default().fsync, FsyncPolicy::Always);
assert_eq!(WalConfig::new(1024).fsync, FsyncPolicy::Always);
}
}