use std::path::PathBuf;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ColdStorageSettings {
#[serde(default)]
pub endpoint: String,
#[serde(default = "default_cold_bucket")]
pub bucket: String,
#[serde(default = "default_cold_prefix")]
pub prefix: String,
#[serde(default)]
pub access_key: String,
#[serde(default)]
pub secret_key: String,
#[serde(default = "default_cold_region")]
pub region: String,
#[serde(default)]
pub local_dir: Option<PathBuf>,
#[serde(default = "default_cold_compression")]
pub compression: String,
#[serde(default = "default_cold_row_group_size")]
pub row_group_size: usize,
#[serde(default = "default_tier_after_secs")]
pub tier_after_secs: u64,
#[serde(default = "default_tier_check_interval_secs")]
pub tier_check_interval_secs: u64,
}
fn default_cold_bucket() -> String {
"nodedb-cold".into()
}
fn default_cold_prefix() -> String {
"data/".into()
}
fn default_cold_region() -> String {
"us-east-1".into()
}
fn default_cold_compression() -> String {
"zstd".into()
}
fn default_cold_row_group_size() -> usize {
65_536
}
fn default_tier_after_secs() -> u64 {
3600 }
fn default_tier_check_interval_secs() -> u64 {
300 }
impl ColdStorageSettings {
pub fn to_cold_storage_config(&self) -> crate::storage::cold::ColdStorageConfig {
let compression = match self.compression.as_str() {
"snappy" => crate::storage::cold::ParquetCompression::Snappy,
"lz4" => crate::storage::cold::ParquetCompression::Lz4,
"none" => crate::storage::cold::ParquetCompression::None,
_ => crate::storage::cold::ParquetCompression::Zstd,
};
crate::storage::cold::ColdStorageConfig {
endpoint: self.endpoint.clone(),
bucket: self.bucket.clone(),
prefix: self.prefix.clone(),
access_key: self.access_key.clone(),
secret_key: self.secret_key.clone(),
region: self.region.clone(),
local_dir: self.local_dir.clone(),
compression,
row_group_size: self.row_group_size,
}
}
}