Add CLI options and runtime support for selection of output snapshot version (bp #10536) (#10712)

* Add CLI options and runtime support for selection of output snapshot version. (#10536)

(cherry picked from commit 6d81eede93)

# Conflicts:
#	core/src/accounts_hash_verifier.rs
#	core/src/rpc_service.rs
#	core/tests/bank_forks.rs
#	ledger-tool/src/main.rs
#	ledger/src/snapshot_package.rs
#	validator/src/main.rs

* Fix conflicts

Co-authored-by: Kristofer Peterson <svenski123@users.noreply.github.com>
Co-authored-by: Ryo Onodera <ryoqun@gmail.com>
This commit is contained in:
mergify[bot]
2020-06-19 07:52:09 +00:00
committed by GitHub
parent 5ac747ea7d
commit e560fff840
10 changed files with 226 additions and 97 deletions

View File

@@ -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::CompressionType;
use solana_ledger::{
bank_forks::{BankForks, SnapshotConfig},
@@ -14,6 +14,7 @@ use solana_ledger::{
hardened_unpack::{open_genesis_config, MAX_GENESIS_ARCHIVE_UNPACKED_SIZE},
rooted_slot_iterator::RootedSlotIterator,
snapshot_utils,
snapshot_utils::SnapshotVersion,
};
use solana_runtime::bank::Bank;
use solana_sdk::{
@@ -573,6 +574,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") {
@@ -653,7 +655,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!())
@@ -774,6 +782,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)
@@ -1048,7 +1057,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"),
@@ -1082,7 +1099,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();
@@ -1094,7 +1115,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,
@@ -1104,6 +1125,7 @@ fn main() {
output_directory,
storages,
CompressionType::Bzip2,
snapshot_version,
)
})
.and_then(|package| {