Add CLI options and runtime support for selection of output snapshot version. (#10536)
This commit is contained in:
committed by
GitHub
parent
b172b3369e
commit
6d81eede93
@@ -3,7 +3,7 @@ use clap::{
|
||||
ArgMatches, SubCommand,
|
||||
};
|
||||
use serde_json::json;
|
||||
use solana_clap_utils::input_validators::is_slot;
|
||||
use solana_clap_utils::input_validators::{is_parsable, is_slot};
|
||||
use solana_ledger::{
|
||||
bank_forks_utils,
|
||||
blockstore::Blockstore,
|
||||
@@ -16,6 +16,7 @@ use solana_runtime::{
|
||||
bank_forks::{BankForks, CompressionType, SnapshotConfig},
|
||||
hardened_unpack::{open_genesis_config, MAX_GENESIS_ARCHIVE_UNPACKED_SIZE},
|
||||
snapshot_utils,
|
||||
snapshot_utils::SnapshotVersion,
|
||||
};
|
||||
use solana_sdk::{
|
||||
clock::Slot, genesis_config::GenesisConfig, native_token::lamports_to_sol, pubkey::Pubkey,
|
||||
@@ -574,6 +575,7 @@ fn load_bank_forks(
|
||||
snapshot_package_output_path: ledger_path.clone(),
|
||||
snapshot_path,
|
||||
compression: CompressionType::Bzip2,
|
||||
snapshot_version: SnapshotVersion::default(),
|
||||
})
|
||||
};
|
||||
let account_paths = if let Some(account_paths) = arg_matches.value_of("account_paths") {
|
||||
@@ -654,7 +656,13 @@ fn main() {
|
||||
.takes_value(true)
|
||||
.default_value(&default_genesis_archive_unpacked_size)
|
||||
.help("maximum total uncompressed size of unpacked genesis archive");
|
||||
|
||||
let snapshot_version_arg = Arg::with_name("snapshot_version")
|
||||
.long("snapshot-version")
|
||||
.value_name("SNAPSHOT_VERSION")
|
||||
.validator(is_parsable::<SnapshotVersion>)
|
||||
.takes_value(true)
|
||||
.default_value(SnapshotVersion::default().into())
|
||||
.help("Output snapshot version");
|
||||
let matches = App::new(crate_name!())
|
||||
.about(crate_description!())
|
||||
.version(solana_version::version!())
|
||||
@@ -775,6 +783,7 @@ fn main() {
|
||||
.arg(&account_paths_arg)
|
||||
.arg(&hard_forks_arg)
|
||||
.arg(&max_genesis_archive_unpacked_size_arg)
|
||||
.arg(&snapshot_version_arg)
|
||||
.arg(
|
||||
Arg::with_name("snapshot_slot")
|
||||
.index(1)
|
||||
@@ -1049,7 +1058,15 @@ fn main() {
|
||||
let snapshot_slot = value_t_or_exit!(arg_matches, "snapshot_slot", Slot);
|
||||
let output_directory = value_t_or_exit!(arg_matches, "output_directory", String);
|
||||
let warp_slot = value_t!(arg_matches, "warp_slot", Slot).ok();
|
||||
|
||||
let snapshot_version =
|
||||
arg_matches
|
||||
.value_of("snapshot_version")
|
||||
.map_or(SnapshotVersion::default(), |s| {
|
||||
s.parse::<SnapshotVersion>().unwrap_or_else(|e| {
|
||||
eprintln!("Error: {}", e);
|
||||
exit(1)
|
||||
})
|
||||
});
|
||||
let process_options = ProcessOptions {
|
||||
dev_halt_at_slot: Some(snapshot_slot),
|
||||
new_hard_forks: hardforks_of(arg_matches, "hard_forks"),
|
||||
@@ -1083,7 +1100,11 @@ fn main() {
|
||||
bank
|
||||
};
|
||||
|
||||
println!("Creating a snapshot of slot {}", bank.slot());
|
||||
println!(
|
||||
"Creating a version {} snapshot of slot {}",
|
||||
snapshot_version,
|
||||
bank.slot(),
|
||||
);
|
||||
assert!(bank.is_complete());
|
||||
bank.squash();
|
||||
bank.clean_accounts();
|
||||
@@ -1095,7 +1116,7 @@ fn main() {
|
||||
});
|
||||
|
||||
let storages: Vec<_> = bank.get_snapshot_storages();
|
||||
snapshot_utils::add_snapshot(&temp_dir, &bank, &storages)
|
||||
snapshot_utils::add_snapshot(&temp_dir, &bank, &storages, snapshot_version)
|
||||
.and_then(|slot_snapshot_paths| {
|
||||
snapshot_utils::package_snapshot(
|
||||
&bank,
|
||||
@@ -1105,6 +1126,7 @@ fn main() {
|
||||
output_directory,
|
||||
storages,
|
||||
CompressionType::Bzip2,
|
||||
snapshot_version,
|
||||
)
|
||||
})
|
||||
.and_then(|package| {
|
||||
|
Reference in New Issue
Block a user