solana_runtime/
snapshot_config.rs1use {
2 crate::{
3 snapshot_bank_utils,
4 snapshot_utils::{self, ArchiveFormat, SnapshotVersion, ZstdConfig},
5 },
6 solana_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 packager_thread_niceness_adj: i8,
46}
47
48impl Default for SnapshotConfig {
49 fn default() -> Self {
50 Self {
51 usage: SnapshotUsage::LoadAndGenerate,
52 full_snapshot_archive_interval_slots:
53 snapshot_bank_utils::DEFAULT_FULL_SNAPSHOT_ARCHIVE_INTERVAL_SLOTS,
54 incremental_snapshot_archive_interval_slots:
55 snapshot_bank_utils::DEFAULT_INCREMENTAL_SNAPSHOT_ARCHIVE_INTERVAL_SLOTS,
56 full_snapshot_archives_dir: PathBuf::default(),
57 incremental_snapshot_archives_dir: PathBuf::default(),
58 bank_snapshots_dir: PathBuf::default(),
59 archive_format: ArchiveFormat::TarZstd {
60 config: ZstdConfig::default(),
61 },
62 snapshot_version: SnapshotVersion::default(),
63 maximum_full_snapshot_archives_to_retain:
64 snapshot_utils::DEFAULT_MAX_FULL_SNAPSHOT_ARCHIVES_TO_RETAIN,
65 maximum_incremental_snapshot_archives_to_retain:
66 snapshot_utils::DEFAULT_MAX_INCREMENTAL_SNAPSHOT_ARCHIVES_TO_RETAIN,
67 packager_thread_niceness_adj: 0,
68 }
69 }
70}
71
72impl SnapshotConfig {
73 pub fn new_load_only() -> Self {
75 Self {
76 usage: SnapshotUsage::LoadOnly,
77 ..Self::default()
78 }
79 }
80
81 pub fn new_disabled() -> Self {
84 Self {
85 usage: SnapshotUsage::Disabled,
86 ..Self::default()
87 }
88 }
89
90 pub fn should_generate_snapshots(&self) -> bool {
92 self.usage == SnapshotUsage::LoadAndGenerate
93 }
94
95 pub fn should_load_snapshots(&self) -> bool {
97 self.usage == SnapshotUsage::LoadAndGenerate || self.usage == SnapshotUsage::LoadOnly
98 }
99}
100
101#[derive(Debug, Clone, Eq, PartialEq)]
103pub enum SnapshotUsage {
104 Disabled,
107 LoadOnly,
109 LoadAndGenerate,
112}