solana_runtime/
snapshot_config.rs1use {
2 crate::snapshot_utils::{self, ArchiveFormat, SnapshotInterval, SnapshotVersion, ZstdConfig},
3 std::{num::NonZeroUsize, path::PathBuf},
4};
5
6#[derive(Clone, Debug)]
8pub struct SnapshotConfig {
9 pub usage: SnapshotUsage,
11
12 pub full_snapshot_archive_interval: SnapshotInterval,
14
15 pub incremental_snapshot_archive_interval: SnapshotInterval,
17
18 pub full_snapshot_archives_dir: PathBuf,
20
21 pub incremental_snapshot_archives_dir: PathBuf,
23
24 pub bank_snapshots_dir: PathBuf,
26
27 pub archive_format: ArchiveFormat,
29
30 pub snapshot_version: SnapshotVersion,
32
33 pub maximum_full_snapshot_archives_to_retain: NonZeroUsize,
35
36 pub maximum_incremental_snapshot_archives_to_retain: NonZeroUsize,
39
40 pub packager_thread_niceness_adj: i8,
42}
43
44impl Default for SnapshotConfig {
45 fn default() -> Self {
46 Self {
47 usage: SnapshotUsage::LoadAndGenerate,
48 full_snapshot_archive_interval: SnapshotInterval::Slots(
49 snapshot_utils::DEFAULT_FULL_SNAPSHOT_ARCHIVE_INTERVAL_SLOTS,
50 ),
51 incremental_snapshot_archive_interval: SnapshotInterval::Slots(
52 snapshot_utils::DEFAULT_INCREMENTAL_SNAPSHOT_ARCHIVE_INTERVAL_SLOTS,
53 ),
54 full_snapshot_archives_dir: PathBuf::default(),
55 incremental_snapshot_archives_dir: PathBuf::default(),
56 bank_snapshots_dir: PathBuf::default(),
57 archive_format: ArchiveFormat::TarZstd {
58 config: ZstdConfig::default(),
59 },
60 snapshot_version: SnapshotVersion::default(),
61 maximum_full_snapshot_archives_to_retain:
62 snapshot_utils::DEFAULT_MAX_FULL_SNAPSHOT_ARCHIVES_TO_RETAIN,
63 maximum_incremental_snapshot_archives_to_retain:
64 snapshot_utils::DEFAULT_MAX_INCREMENTAL_SNAPSHOT_ARCHIVES_TO_RETAIN,
65 packager_thread_niceness_adj: 0,
66 }
67 }
68}
69
70impl SnapshotConfig {
71 pub fn new_load_only() -> Self {
73 Self {
74 usage: SnapshotUsage::LoadOnly,
75 full_snapshot_archive_interval: SnapshotInterval::Disabled,
76 incremental_snapshot_archive_interval: SnapshotInterval::Disabled,
77 ..Self::default()
78 }
79 }
80
81 pub fn new_disabled() -> Self {
84 Self {
85 usage: SnapshotUsage::Disabled,
86 full_snapshot_archive_interval: SnapshotInterval::Disabled,
87 incremental_snapshot_archive_interval: SnapshotInterval::Disabled,
88 ..Self::default()
89 }
90 }
91
92 pub fn should_generate_snapshots(&self) -> bool {
94 self.usage == SnapshotUsage::LoadAndGenerate
95 }
96
97 pub fn should_load_snapshots(&self) -> bool {
99 self.usage == SnapshotUsage::LoadAndGenerate || self.usage == SnapshotUsage::LoadOnly
100 }
101}
102
103#[derive(Debug, Clone, Eq, PartialEq)]
105pub enum SnapshotUsage {
106 Disabled,
109 LoadOnly,
111 LoadAndGenerate,
114}