use std::sync::atomic::{AtomicU8, AtomicUsize, Ordering};
pub const DEFAULT_METADATA_JOURNAL_RETENTION: usize = 32;
pub const OPT_IN_METADATA_JOURNAL_RETENTION: usize = 4;
static META_JSON_SIDECAR_POLICY: AtomicU8 = AtomicU8::new(0);
pub fn set_meta_json_sidecar_enabled(enabled: bool) {
META_JSON_SIDECAR_POLICY.store(if enabled { 1 } else { 2 }, Ordering::Relaxed);
}
pub fn meta_json_sidecar_enabled() -> bool {
match META_JSON_SIDECAR_POLICY.load(Ordering::Relaxed) {
1 => true,
2 => false,
_ => env_flag("REDDB_META_JSON_SIDECAR"),
}
}
static SEQN_JOURNAL_POLICY: AtomicU8 = AtomicU8::new(0);
static SEQN_JOURNAL_RETENTION: AtomicUsize = AtomicUsize::new(0);
pub fn set_seqn_journal_enabled(enabled: bool) {
SEQN_JOURNAL_POLICY.store(if enabled { 1 } else { 2 }, Ordering::Relaxed);
}
pub fn seqn_journal_enabled() -> bool {
match SEQN_JOURNAL_POLICY.load(Ordering::Relaxed) {
1 => true,
2 => false,
_ => env_flag("REDDB_SEQN_JOURNAL"),
}
}
static FOLD_PAGER_META_POLICY: AtomicU8 = AtomicU8::new(0);
pub fn set_fold_pager_meta_enabled(enabled: bool) {
FOLD_PAGER_META_POLICY.store(if enabled { 1 } else { 2 }, Ordering::Relaxed);
}
pub fn fold_pager_meta_enabled() -> bool {
match FOLD_PAGER_META_POLICY.load(Ordering::Relaxed) {
1 => true,
2 => false,
_ => env_flag("REDDB_FOLD_PAGER_META"),
}
}
static FOLD_DWB_INTO_WAL_POLICY: AtomicU8 = AtomicU8::new(0);
pub fn set_fold_dwb_into_wal_enabled(enabled: bool) {
FOLD_DWB_INTO_WAL_POLICY.store(if enabled { 1 } else { 2 }, Ordering::Relaxed);
}
pub fn fold_dwb_into_wal_enabled() -> bool {
match FOLD_DWB_INTO_WAL_POLICY.load(Ordering::Relaxed) {
1 => true,
2 => false,
_ => env_flag("REDDB_FOLD_DWB_INTO_WAL"),
}
}
pub fn set_seqn_journal_retention(retention: usize) {
SEQN_JOURNAL_RETENTION.store(retention, Ordering::Relaxed);
}
pub fn seqn_journal_retention() -> usize {
let stored = SEQN_JOURNAL_RETENTION.load(Ordering::Relaxed);
if stored > 0 {
return stored;
}
std::env::var("REDDB_SEQN_JOURNAL_RETENTION")
.ok()
.and_then(|v| v.parse::<usize>().ok())
.filter(|v| *v > 0)
.unwrap_or(OPT_IN_METADATA_JOURNAL_RETENTION)
}
fn env_flag(name: &str) -> bool {
std::env::var(name)
.ok()
.map(|v| matches!(v.as_str(), "1" | "true" | "TRUE" | "yes" | "on"))
.unwrap_or(false)
}