solana_runtime/snapshot_config.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
use {
crate::{
snapshot_bank_utils,
snapshot_utils::{self, ArchiveFormat, SnapshotVersion},
},
solana_sdk::clock::Slot,
std::{num::NonZeroUsize, path::PathBuf},
};
/// Snapshot configuration and runtime information
#[derive(Clone, Debug)]
pub struct SnapshotConfig {
/// Specifies the ways thats snapshots are allowed to be used
pub usage: SnapshotUsage,
/// Generate a new full snapshot archive every this many slots
pub full_snapshot_archive_interval_slots: Slot,
/// Generate a new incremental snapshot archive every this many slots
pub incremental_snapshot_archive_interval_slots: Slot,
/// Path to the directory where full snapshot archives are stored
pub full_snapshot_archives_dir: PathBuf,
/// Path to the directory where incremental snapshot archives are stored
pub incremental_snapshot_archives_dir: PathBuf,
/// Path to the directory where bank snapshots are stored
pub bank_snapshots_dir: PathBuf,
/// The archive format to use for snapshots
pub archive_format: ArchiveFormat,
/// Snapshot version to generate
pub snapshot_version: SnapshotVersion,
/// Maximum number of full snapshot archives to retain
pub maximum_full_snapshot_archives_to_retain: NonZeroUsize,
/// Maximum number of incremental snapshot archives to retain
/// NOTE: Incremental snapshots will only be kept for the latest full snapshot
pub maximum_incremental_snapshot_archives_to_retain: NonZeroUsize,
/// This is the `debug_verify` parameter to use when calling `update_accounts_hash()`
pub accounts_hash_debug_verify: bool,
// Thread niceness adjustment for snapshot packager service
pub packager_thread_niceness_adj: i8,
}
impl Default for SnapshotConfig {
fn default() -> Self {
Self {
usage: SnapshotUsage::LoadAndGenerate,
full_snapshot_archive_interval_slots:
snapshot_bank_utils::DEFAULT_FULL_SNAPSHOT_ARCHIVE_INTERVAL_SLOTS,
incremental_snapshot_archive_interval_slots:
snapshot_bank_utils::DEFAULT_INCREMENTAL_SNAPSHOT_ARCHIVE_INTERVAL_SLOTS,
full_snapshot_archives_dir: PathBuf::default(),
incremental_snapshot_archives_dir: PathBuf::default(),
bank_snapshots_dir: PathBuf::default(),
archive_format: ArchiveFormat::TarZstd,
snapshot_version: SnapshotVersion::default(),
maximum_full_snapshot_archives_to_retain:
snapshot_utils::DEFAULT_MAX_FULL_SNAPSHOT_ARCHIVES_TO_RETAIN,
maximum_incremental_snapshot_archives_to_retain:
snapshot_utils::DEFAULT_MAX_INCREMENTAL_SNAPSHOT_ARCHIVES_TO_RETAIN,
accounts_hash_debug_verify: false,
packager_thread_niceness_adj: 0,
}
}
}
impl SnapshotConfig {
/// A new snapshot config used for only loading at startup
#[must_use]
pub fn new_load_only() -> Self {
Self {
usage: SnapshotUsage::LoadOnly,
..Self::default()
}
}
/// Should snapshots be generated?
#[must_use]
pub fn should_generate_snapshots(&self) -> bool {
self.usage == SnapshotUsage::LoadAndGenerate
}
}
/// Specify the ways that snapshots are allowed to be used
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum SnapshotUsage {
/// Snapshots are only used at startup, to load the accounts and bank
LoadOnly,
/// Snapshots are used everywhere; both at startup (i.e. load) and steady-state (i.e.
/// generate). This enables taking snapshots.
LoadAndGenerate,
}