solana/ledger/src/use_snapshot_archives_at_st...

52 lines
2.5 KiB
Rust

use strum::{Display, EnumString, EnumVariantNames, IntoStaticStr, VariantNames};
/// When should snapshot archives be used at startup?
#[derive(
Debug, Default, Clone, Copy, PartialEq, Eq, Display, EnumString, EnumVariantNames, IntoStaticStr,
)]
#[strum(serialize_all = "kebab-case")]
pub enum UseSnapshotArchivesAtStartup {
/// If snapshot archives are used, they will be extracted and overwrite any existing state
/// already on disk. This will incur the associated runtime costs for extracting.
#[default]
Always,
/// If snapshot archives are not used, then the local snapshot state already on disk is
/// used instead. If there is no local state on disk, startup will fail.
Never,
/// Only use snapshot archives if they are newer than the local snapshot state on disk.
/// This can happen if a node is stopped and a new snapshot archive is downloaded before
/// restarting. At startup, the snapshot archive would be the newest and loaded from.
/// Note, this also implies that snapshot archives will be used if there is no local snapshot
/// state on disk.
WhenNewest,
}
pub mod cli {
use super::*;
pub const NAME: &str = "use_snapshot_archives_at_startup";
pub const LONG_ARG: &str = "use-snapshot-archives-at-startup";
pub const HELP: &str = "When should snapshot archives be used at startup?";
pub const LONG_HELP: &str = "At startup, when should snapshot archives be extracted \
versus using what is already on disk? \
\nSpecifying \"always\" will always startup by extracting snapshot archives \
and disregard any snapshot-related state already on disk. \
Note that starting up from snapshot archives will incur the runtime costs \
associated with extracting the archives and rebuilding the local state. \
\nSpecifying \"never\" will never startup from snapshot archives \
and will only use snapshot-related state already on disk. \
If there is no state already on disk, startup will fail. \
Note, this will use the latest state available, \
which may be newer than the latest snapshot archive. \
Specifying \"when-newest\" will use snapshot-related state \
already on disk unless there are snapshot archives newer than it. \
This can happen if a new snapshot archive is downloaded \
while the node is stopped.";
pub const POSSIBLE_VALUES: &[&str] = UseSnapshotArchivesAtStartup::VARIANTS;
pub fn default_value() -> &'static str {
UseSnapshotArchivesAtStartup::default().into()
}
}