snapshot code needs all storages for hash calc (#23840)
This commit is contained in:
committed by
GitHub
parent
92462ae031
commit
bc35e1c5f5
@ -78,12 +78,6 @@ impl AccountsPackage {
|
|||||||
bank.slot() > incremental_snapshot_base_slot,
|
bank.slot() > incremental_snapshot_base_slot,
|
||||||
"Incremental snapshot base slot must be less than the bank being snapshotted!"
|
"Incremental snapshot base slot must be less than the bank being snapshotted!"
|
||||||
);
|
);
|
||||||
assert!(
|
|
||||||
snapshot_storages.iter().all(|storage| storage
|
|
||||||
.iter()
|
|
||||||
.all(|entry| entry.slot() > incremental_snapshot_base_slot)),
|
|
||||||
"Incremental snapshot package must only contain storage entries where slot > incremental snapshot base slot (i.e. full snapshot slot)!"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hard link the snapshot into a tmpdir, to ensure its not removed prior to packaging.
|
// Hard link the snapshot into a tmpdir, to ensure its not removed prior to packaging.
|
||||||
@ -136,6 +130,7 @@ impl From<AccountsPackage> for SnapshotPackage {
|
|||||||
"Cannot make a SnapshotPackage from an AccountsPackage when SnapshotType is None!"
|
"Cannot make a SnapshotPackage from an AccountsPackage when SnapshotType is None!"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let mut snapshot_storages = accounts_package.snapshot_storages;
|
||||||
let snapshot_archive_path = match accounts_package.snapshot_type.unwrap() {
|
let snapshot_archive_path = match accounts_package.snapshot_type.unwrap() {
|
||||||
SnapshotType::FullSnapshot => snapshot_utils::build_full_snapshot_archive_path(
|
SnapshotType::FullSnapshot => snapshot_utils::build_full_snapshot_archive_path(
|
||||||
accounts_package.snapshot_archives_dir,
|
accounts_package.snapshot_archives_dir,
|
||||||
@ -144,6 +139,18 @@ impl From<AccountsPackage> for SnapshotPackage {
|
|||||||
accounts_package.archive_format,
|
accounts_package.archive_format,
|
||||||
),
|
),
|
||||||
SnapshotType::IncrementalSnapshot(incremental_snapshot_base_slot) => {
|
SnapshotType::IncrementalSnapshot(incremental_snapshot_base_slot) => {
|
||||||
|
snapshot_storages.retain(|storages| {
|
||||||
|
storages
|
||||||
|
.first() // storages are grouped by slot in the outer Vec, so all storages will have the same slot as the first
|
||||||
|
.map(|storage| storage.slot() > incremental_snapshot_base_slot)
|
||||||
|
.unwrap_or_default()
|
||||||
|
});
|
||||||
|
assert!(
|
||||||
|
snapshot_storages.iter().all(|storage| storage
|
||||||
|
.iter()
|
||||||
|
.all(|entry| entry.slot() > incremental_snapshot_base_slot)),
|
||||||
|
"Incremental snapshot package must only contain storage entries where slot > incremental snapshot base slot (i.e. full snapshot slot)!"
|
||||||
|
);
|
||||||
snapshot_utils::build_incremental_snapshot_archive_path(
|
snapshot_utils::build_incremental_snapshot_archive_path(
|
||||||
accounts_package.snapshot_archives_dir,
|
accounts_package.snapshot_archives_dir,
|
||||||
incremental_snapshot_base_slot,
|
incremental_snapshot_base_slot,
|
||||||
@ -164,7 +171,7 @@ impl From<AccountsPackage> for SnapshotPackage {
|
|||||||
block_height: accounts_package.block_height,
|
block_height: accounts_package.block_height,
|
||||||
slot_deltas: accounts_package.slot_deltas,
|
slot_deltas: accounts_package.slot_deltas,
|
||||||
snapshot_links: accounts_package.snapshot_links,
|
snapshot_links: accounts_package.snapshot_links,
|
||||||
snapshot_storages: accounts_package.snapshot_storages,
|
snapshot_storages,
|
||||||
snapshot_version: accounts_package.snapshot_version,
|
snapshot_version: accounts_package.snapshot_version,
|
||||||
snapshot_type: accounts_package.snapshot_type.unwrap(),
|
snapshot_type: accounts_package.snapshot_type.unwrap(),
|
||||||
}
|
}
|
||||||
|
@ -1636,7 +1636,7 @@ pub fn snapshot_bank(
|
|||||||
hash_for_testing: Option<Hash>,
|
hash_for_testing: Option<Hash>,
|
||||||
snapshot_type: Option<SnapshotType>,
|
snapshot_type: Option<SnapshotType>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let snapshot_storages = get_snapshot_storages(root_bank, snapshot_type);
|
let snapshot_storages = get_snapshot_storages(root_bank);
|
||||||
|
|
||||||
let mut add_snapshot_time = Measure::start("add-snapshot-ms");
|
let mut add_snapshot_time = Measure::start("add-snapshot-ms");
|
||||||
let bank_snapshot_info = add_bank_snapshot(
|
let bank_snapshot_info = add_bank_snapshot(
|
||||||
@ -1667,44 +1667,21 @@ pub fn snapshot_bank(
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the snapshot storages for this bank and snapshot_type
|
/// Get the snapshot storages for this bank
|
||||||
fn get_snapshot_storages(bank: &Bank, snapshot_type: Option<SnapshotType>) -> SnapshotStorages {
|
fn get_snapshot_storages(bank: &Bank) -> SnapshotStorages {
|
||||||
let mut measure_snapshot_storages = Measure::start("snapshot-storages");
|
let mut measure_snapshot_storages = Measure::start("snapshot-storages");
|
||||||
let snapshot_storages = snapshot_type.map_or_else(SnapshotStorages::default, |snapshot_type| {
|
let snapshot_storages = bank.get_snapshot_storages(None);
|
||||||
let incremental_snapshot_base_slot = match snapshot_type {
|
|
||||||
SnapshotType::IncrementalSnapshot(incremental_snapshot_base_slot) => {
|
|
||||||
Some(incremental_snapshot_base_slot)
|
|
||||||
}
|
|
||||||
_ => None,
|
|
||||||
};
|
|
||||||
bank.get_snapshot_storages(incremental_snapshot_base_slot)
|
|
||||||
});
|
|
||||||
measure_snapshot_storages.stop();
|
measure_snapshot_storages.stop();
|
||||||
|
|
||||||
if let Some(snapshot_type) = snapshot_type {
|
|
||||||
let snapshot_storages_count_name;
|
|
||||||
let snapshot_storages_time_name;
|
|
||||||
match snapshot_type {
|
|
||||||
SnapshotType::FullSnapshot => {
|
|
||||||
snapshot_storages_count_name = "full-snapshot-storages-count";
|
|
||||||
snapshot_storages_time_name = "full-snapshot-storages-time-ms";
|
|
||||||
}
|
|
||||||
SnapshotType::IncrementalSnapshot(_) => {
|
|
||||||
snapshot_storages_count_name = "incremental-snapshot-storages-count";
|
|
||||||
snapshot_storages_time_name = "incremental-snapshot-storages-time-ms";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let snapshot_storages_count = snapshot_storages.iter().map(Vec::len).sum::<usize>();
|
let snapshot_storages_count = snapshot_storages.iter().map(Vec::len).sum::<usize>();
|
||||||
datapoint_info!(
|
datapoint_info!(
|
||||||
"get_snapshot_storages",
|
"get_snapshot_storages",
|
||||||
(snapshot_storages_count_name, snapshot_storages_count, i64),
|
("snapshot-storages-count", snapshot_storages_count, i64),
|
||||||
(
|
(
|
||||||
snapshot_storages_time_name,
|
"snapshot-storages-time-ms",
|
||||||
measure_snapshot_storages.as_ms(),
|
measure_snapshot_storages.as_ms(),
|
||||||
i64
|
i64
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
snapshot_storages
|
snapshot_storages
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user