* purge_old_snapshot_archives is changed to take an extra argument 'maximum_snapshots_to_retain' to control the max number of latest snapshot archives to retain. Note the oldest snapshot is always retained as before and is not subjected to this new options. * The validator and ledger-tool executables are modified with a CLI argument --maximum-snapshots-to-retain. And the options are propagated down the call chains. Their corresponding shell scripts were changed accordingly. * SnapshotConfig is modified to have an extra field for the maximum_snapshots_to_retain * Unit tests are developed to cover purge_old_snapshot_archives
This commit is contained in:
@ -44,7 +44,7 @@ use {
|
||||
},
|
||||
bank_forks::{ArchiveFormat, SnapshotConfig, SnapshotVersion},
|
||||
hardened_unpack::{unpack_genesis_archive, MAX_GENESIS_ARCHIVE_UNPACKED_SIZE},
|
||||
snapshot_utils::get_highest_snapshot_archive_path,
|
||||
snapshot_utils::{get_highest_snapshot_archive_path, DEFAULT_MAX_SNAPSHOTS_TO_RETAIN},
|
||||
},
|
||||
solana_sdk::{
|
||||
clock::{Slot, DEFAULT_S_PER_SLOT},
|
||||
@ -945,11 +945,19 @@ fn rpc_bootstrap(
|
||||
gossip.take().unwrap();
|
||||
cluster_info.save_contact_info();
|
||||
gossip_exit_flag.store(true, Ordering::Relaxed);
|
||||
let maximum_snapshots_to_retain = if let Some(snapshot_config) =
|
||||
validator_config.snapshot_config.as_ref()
|
||||
{
|
||||
snapshot_config.maximum_snapshots_to_retain
|
||||
} else {
|
||||
DEFAULT_MAX_SNAPSHOTS_TO_RETAIN
|
||||
};
|
||||
let ret = download_snapshot(
|
||||
&rpc_contact_info.rpc,
|
||||
&snapshot_output_dir,
|
||||
snapshot_hash,
|
||||
use_progress_bar,
|
||||
maximum_snapshots_to_retain,
|
||||
);
|
||||
gossip_service.join().unwrap();
|
||||
ret
|
||||
@ -1028,6 +1036,7 @@ pub fn main() {
|
||||
.send_transaction_leader_forward_count
|
||||
.to_string();
|
||||
let default_rpc_threads = num_cpus::get().to_string();
|
||||
let default_max_snapshot_to_retain = &DEFAULT_MAX_SNAPSHOTS_TO_RETAIN.to_string();
|
||||
|
||||
let matches = App::new(crate_name!()).about(crate_description!())
|
||||
.version(solana_version::version!())
|
||||
@ -1323,6 +1332,14 @@ pub fn main() {
|
||||
.help("Number of slots between generating snapshots, \
|
||||
0 to disable snapshots"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("maximum_snapshots_to_retain")
|
||||
.long("maximum-snapshots-to-retain")
|
||||
.value_name("MAXIMUM_SNAPSHOTS_TO_RETAIN")
|
||||
.takes_value(true)
|
||||
.default_value(default_max_snapshot_to_retain)
|
||||
.help("The maximum number of snapshots to hold on to when purging older snapshots.")
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("contact_debug_interval")
|
||||
.long("contact-debug-interval")
|
||||
@ -2225,6 +2242,8 @@ pub fn main() {
|
||||
|
||||
let snapshot_interval_slots = value_t_or_exit!(matches, "snapshot_interval_slots", u64);
|
||||
let maximum_local_snapshot_age = value_t_or_exit!(matches, "maximum_local_snapshot_age", u64);
|
||||
let maximum_snapshots_to_retain =
|
||||
value_t_or_exit!(matches, "maximum_snapshots_to_retain", usize);
|
||||
let snapshot_output_dir = if matches.is_present("snapshots") {
|
||||
PathBuf::from(matches.value_of("snapshots").unwrap())
|
||||
} else {
|
||||
@ -2269,6 +2288,7 @@ pub fn main() {
|
||||
snapshot_package_output_path: snapshot_output_dir.clone(),
|
||||
archive_format,
|
||||
snapshot_version,
|
||||
maximum_snapshots_to_retain,
|
||||
});
|
||||
|
||||
validator_config.accounts_hash_interval_slots =
|
||||
|
Reference in New Issue
Block a user