Take incremental snapshots with ledger-tool (#20857)
This commit is contained in:
parent
a9177a5447
commit
50571685d4
|
@ -1415,6 +1415,15 @@ fn main() {
|
||||||
.takes_value(false)
|
.takes_value(false)
|
||||||
.help("Remove all existing stake accounts from the new snapshot")
|
.help("Remove all existing stake accounts from the new snapshot")
|
||||||
)
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("incremental")
|
||||||
|
.long("incremental")
|
||||||
|
.takes_value(false)
|
||||||
|
.help("Create an incremental snapshot instead of a full snapshot. This requires \
|
||||||
|
that the ledger is loaded from a full snapshot, which will be used as the \
|
||||||
|
base for the incremental snapshot.")
|
||||||
|
.conflicts_with("no_snapshot")
|
||||||
|
)
|
||||||
).subcommand(
|
).subcommand(
|
||||||
SubCommand::with_name("accounts")
|
SubCommand::with_name("accounts")
|
||||||
.about("Print account contents after processing in the ledger")
|
.about("Print account contents after processing in the ledger")
|
||||||
|
@ -2154,6 +2163,7 @@ fn main() {
|
||||||
AccessType::TryPrimaryThenSecondary,
|
AccessType::TryPrimaryThenSecondary,
|
||||||
wal_recovery_mode,
|
wal_recovery_mode,
|
||||||
);
|
);
|
||||||
|
let is_incremental = arg_matches.is_present("incremental");
|
||||||
|
|
||||||
let snapshot_slot = if Some("ROOT") == arg_matches.value_of("snapshot_slot") {
|
let snapshot_slot = if Some("ROOT") == arg_matches.value_of("snapshot_slot") {
|
||||||
blockstore
|
blockstore
|
||||||
|
@ -2166,7 +2176,8 @@ fn main() {
|
||||||
};
|
};
|
||||||
|
|
||||||
info!(
|
info!(
|
||||||
"Creating snapshot of slot {} in {}",
|
"Creating {}snapshot of slot {} in {}",
|
||||||
|
if is_incremental { "incremental " } else { "" },
|
||||||
snapshot_slot,
|
snapshot_slot,
|
||||||
output_directory.display()
|
output_directory.display()
|
||||||
);
|
);
|
||||||
|
@ -2183,7 +2194,7 @@ fn main() {
|
||||||
},
|
},
|
||||||
snapshot_archive_path,
|
snapshot_archive_path,
|
||||||
) {
|
) {
|
||||||
Ok((bank_forks, ..)) => {
|
Ok((bank_forks, .., starting_snapshot_hashes)) => {
|
||||||
let mut bank = bank_forks
|
let mut bank = bank_forks
|
||||||
.get(snapshot_slot)
|
.get(snapshot_slot)
|
||||||
.unwrap_or_else(|| {
|
.unwrap_or_else(|| {
|
||||||
|
@ -2381,31 +2392,73 @@ fn main() {
|
||||||
};
|
};
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
"Creating a version {} snapshot of slot {}",
|
"Creating a version {} {}snapshot of slot {}",
|
||||||
snapshot_version,
|
snapshot_version,
|
||||||
|
if is_incremental { "incremental " } else { "" },
|
||||||
bank.slot(),
|
bank.slot(),
|
||||||
);
|
);
|
||||||
|
|
||||||
let full_snapshot_archive_info = snapshot_utils::bank_to_full_snapshot_archive(
|
if is_incremental {
|
||||||
ledger_path,
|
if starting_snapshot_hashes.is_none() {
|
||||||
&bank,
|
eprintln!("Unable to create incremental snapshot without a base full snapshot");
|
||||||
Some(snapshot_version),
|
exit(1);
|
||||||
output_directory,
|
}
|
||||||
ArchiveFormat::TarZstd,
|
let full_snapshot_slot = starting_snapshot_hashes.unwrap().full.hash.0;
|
||||||
maximum_full_snapshot_archives_to_retain,
|
if bank.slot() <= full_snapshot_slot {
|
||||||
maximum_incremental_snapshot_archives_to_retain,
|
eprintln!("Unable to create incremental snapshot: Slot must be greater than full snapshot slot. slot: {}, full snapshot slot: {}",
|
||||||
)
|
bank.slot(),
|
||||||
.unwrap_or_else(|err| {
|
full_snapshot_slot,
|
||||||
eprintln!("Unable to create snapshot: {}", err);
|
);
|
||||||
exit(1);
|
exit(1);
|
||||||
});
|
}
|
||||||
|
|
||||||
|
let incremental_snapshot_archive_info =
|
||||||
|
snapshot_utils::bank_to_incremental_snapshot_archive(
|
||||||
|
ledger_path,
|
||||||
|
&bank,
|
||||||
|
full_snapshot_slot,
|
||||||
|
Some(snapshot_version),
|
||||||
|
output_directory,
|
||||||
|
ArchiveFormat::TarZstd,
|
||||||
|
maximum_full_snapshot_archives_to_retain,
|
||||||
|
maximum_incremental_snapshot_archives_to_retain,
|
||||||
|
)
|
||||||
|
.unwrap_or_else(|err| {
|
||||||
|
eprintln!("Unable to create incremental snapshot: {}", err);
|
||||||
|
exit(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"Successfully created incremental snapshot for slot {}, hash {}, base slot: {}: {}",
|
||||||
|
bank.slot(),
|
||||||
|
bank.hash(),
|
||||||
|
full_snapshot_slot,
|
||||||
|
incremental_snapshot_archive_info.path().display(),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
let full_snapshot_archive_info =
|
||||||
|
snapshot_utils::bank_to_full_snapshot_archive(
|
||||||
|
ledger_path,
|
||||||
|
&bank,
|
||||||
|
Some(snapshot_version),
|
||||||
|
output_directory,
|
||||||
|
ArchiveFormat::TarZstd,
|
||||||
|
maximum_full_snapshot_archives_to_retain,
|
||||||
|
maximum_incremental_snapshot_archives_to_retain,
|
||||||
|
)
|
||||||
|
.unwrap_or_else(|err| {
|
||||||
|
eprintln!("Unable to create snapshot: {}", err);
|
||||||
|
exit(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"Successfully created snapshot for slot {}, hash {}: {}",
|
||||||
|
bank.slot(),
|
||||||
|
bank.hash(),
|
||||||
|
full_snapshot_archive_info.path().display(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
println!(
|
|
||||||
"Successfully created snapshot for slot {}, hash {}: {}",
|
|
||||||
bank.slot(),
|
|
||||||
bank.hash(),
|
|
||||||
full_snapshot_archive_info.path().display(),
|
|
||||||
);
|
|
||||||
println!(
|
println!(
|
||||||
"Shred version: {}",
|
"Shred version: {}",
|
||||||
compute_shred_version(
|
compute_shred_version(
|
||||||
|
|
Loading…
Reference in New Issue