solana_runtime/
snapshot_config.rs1use {
2 crate::{
3 snapshot_bank_utils,
4 snapshot_utils::{self, ArchiveFormat, SnapshotVersion, ZstdConfig},
5 },
6 solana_sdk::clock::Slot,
7 std::{num::NonZeroUsize, path::PathBuf},
8};
9
10#[derive(Clone, Debug)]
12pub struct SnapshotConfig {
13 pub usage: SnapshotUsage,
15
16 pub full_snapshot_archive_interval_slots: Slot,
18
19 pub incremental_snapshot_archive_interval_slots: Slot,
21
22 pub full_snapshot_archives_dir: PathBuf,
24
25 pub incremental_snapshot_archives_dir: PathBuf,
27
28 pub bank_snapshots_dir: PathBuf,
30
31 pub archive_format: ArchiveFormat,
33
34 pub snapshot_version: SnapshotVersion,
36
37 pub maximum_full_snapshot_archives_to_retain: NonZeroUsize,
39
40 pub maximum_incremental_snapshot_archives_to_retain: NonZeroUsize,
43
44 pub accounts_hash_debug_verify: bool,
46
47 pub packager_thread_niceness_adj: i8,
49}
50
51impl Default for SnapshotConfig {
52 fn default() -> Self {
53 Self {
54 usage: SnapshotUsage::LoadAndGenerate,
55 full_snapshot_archive_interval_slots:
56 snapshot_bank_utils::DEFAULT_FULL_SNAPSHOT_ARCHIVE_INTERVAL_SLOTS,
57 incremental_snapshot_archive_interval_slots:
58 snapshot_bank_utils::DEFAULT_INCREMENTAL_SNAPSHOT_ARCHIVE_INTERVAL_SLOTS,
59 full_snapshot_archives_dir: PathBuf::default(),
60 incremental_snapshot_archives_dir: PathBuf::default(),
61 bank_snapshots_dir: PathBuf::default(),
62 archive_format: ArchiveFormat::TarZstd {
63 config: ZstdConfig::default(),
64 },
65 snapshot_version: SnapshotVersion::default(),
66 maximum_full_snapshot_archives_to_retain:
67 snapshot_utils::DEFAULT_MAX_FULL_SNAPSHOT_ARCHIVES_TO_RETAIN,
68 maximum_incremental_snapshot_archives_to_retain:
69 snapshot_utils::DEFAULT_MAX_INCREMENTAL_SNAPSHOT_ARCHIVES_TO_RETAIN,
70 accounts_hash_debug_verify: false,
71 packager_thread_niceness_adj: 0,
72 }
73 }
74}
75
76impl SnapshotConfig {
77 #[must_use]
79 pub fn new_load_only() -> Self {
80 Self {
81 usage: SnapshotUsage::LoadOnly,
82 ..Self::default()
83 }
84 }
85
86 #[must_use]
88 pub fn should_generate_snapshots(&self) -> bool {
89 self.usage == SnapshotUsage::LoadAndGenerate
90 }
91}
92
93#[derive(Debug, Clone, Eq, PartialEq)]
95pub enum SnapshotUsage {
96 LoadOnly,
98 LoadAndGenerate,
101}