use std::str::FromStr;
use blockchain::Config as BlockChainConfig;
use journaldb;
use vapcore_snapshot::SnapshotConfiguration;
use vapcore_trace::Config as TraceConfig;
use types::client_types::Mode;
use verification::{VerifierType, QueueConfig};
#[derive(Debug, PartialEq, Clone)]
pub enum DatabaseCompactionProfile {
Auto,
SSD,
HDD,
}
impl Default for DatabaseCompactionProfile {
fn default() -> Self {
DatabaseCompactionProfile::Auto
}
}
impl FromStr for DatabaseCompactionProfile {
type Err = String;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"auto" => Ok(DatabaseCompactionProfile::Auto),
"ssd" => Ok(DatabaseCompactionProfile::SSD),
"hdd" => Ok(DatabaseCompactionProfile::HDD),
_ => Err("Invalid compaction profile given. Expected default/hdd/ssd.".into()),
}
}
}
#[derive(Debug, PartialEq, Clone)]
pub struct ClientConfig {
pub queue: QueueConfig,
pub blockchain: BlockChainConfig,
pub tracing: TraceConfig,
pub fat_db: bool,
pub pruning: journaldb::Algorithm,
pub name: String,
pub db_cache_size: Option<usize>,
pub db_compaction: DatabaseCompactionProfile,
pub mode: Mode,
pub spec_name: String,
pub verifier_type: VerifierType,
pub state_cache_size: usize,
pub jump_table_size: usize,
pub history: u64,
pub history_mem: usize,
pub check_seal: bool,
pub transaction_verification_queue_size: usize,
pub max_round_blocks_to_import: usize,
pub snapshot: SnapshotConfiguration,
}
impl Default for ClientConfig {
fn default() -> Self {
let mb = 1024 * 1024;
ClientConfig {
queue: Default::default(),
blockchain: Default::default(),
tracing: Default::default(),
fat_db: false,
pruning: journaldb::Algorithm::OverlayRecent,
name: "default".into(),
db_cache_size: None,
db_compaction: Default::default(),
mode: Mode::Active,
spec_name: "".into(),
verifier_type: VerifierType::Canon,
state_cache_size: 1 * mb,
jump_table_size: 1 * mb,
history: 64,
history_mem: 32 * mb,
check_seal: true,
transaction_verification_queue_size: 8192,
max_round_blocks_to_import: 12,
snapshot: Default::default(),
}
}
}
#[cfg(test)]
mod test {
use super::DatabaseCompactionProfile;
#[test]
fn test_default_compaction_profile() {
assert_eq!(DatabaseCompactionProfile::default(), DatabaseCompactionProfile::Auto);
}
#[test]
fn test_parsing_compaction_profile() {
assert_eq!(DatabaseCompactionProfile::Auto, "auto".parse().unwrap());
assert_eq!(DatabaseCompactionProfile::SSD, "ssd".parse().unwrap());
assert_eq!(DatabaseCompactionProfile::HDD, "hdd".parse().unwrap());
}
}