use std::path::Path;
use iridium::features::storage::api;
pub(super) fn open_store_with_data_root(
data_root: Option<&Path>,
) -> api::Result<api::StorageHandle> {
let data_dir = if let Some(path) = data_root {
path.to_path_buf()
} else {
let base_dir = std::env::current_dir().map_err(api::StorageError::from)?;
base_dir.join("data")
};
let wal_dir = data_dir.join("wal");
let manifest_path = data_dir.join("ir.manifest");
let sstable_dir = data_dir.join("sst");
api::open_store(api::StorageConfig {
buffer_pool_pages: 1024,
wal_dir,
wal_segment_max_bytes: 1 << 20,
manifest_path,
sstable_dir,
})
}
pub(super) fn env_u64_or(key: &str, default: u64) -> u64 {
std::env::var(key)
.ok()
.and_then(|v| v.parse::<u64>().ok())
.unwrap_or(default)
}
pub(super) fn env_usize_or(key: &str, default: usize) -> usize {
std::env::var(key)
.ok()
.and_then(|v| v.parse::<usize>().ok())
.unwrap_or(default)
}