Uses SnapshotHash type in snapshot archive fields (#28681)

This commit is contained in:
Brooks Prumo 2022-10-31 14:28:35 -04:00 committed by GitHub
parent 34865d032c
commit 59bf1809fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 100 additions and 54 deletions

View File

@ -94,7 +94,7 @@ impl SnapshotPackagerService {
if let Some(snapshot_gossip_manager) = snapshot_gossip_manager.as_mut() { if let Some(snapshot_gossip_manager) = snapshot_gossip_manager.as_mut() {
snapshot_gossip_manager.push_snapshot_hash( snapshot_gossip_manager.push_snapshot_hash(
snapshot_package.snapshot_type, snapshot_package.snapshot_type,
(snapshot_package.slot(), *snapshot_package.hash()), (snapshot_package.slot(), snapshot_package.hash().0),
); );
} }
} }
@ -225,6 +225,7 @@ mod tests {
accounts_db::AccountStorageEntry, accounts_db::AccountStorageEntry,
bank::BankSlotDelta, bank::BankSlotDelta,
snapshot_archive_info::SnapshotArchiveInfo, snapshot_archive_info::SnapshotArchiveInfo,
snapshot_hash::SnapshotHash,
snapshot_package::{SnapshotPackage, SnapshotType}, snapshot_package::{SnapshotPackage, SnapshotType},
snapshot_utils::{ snapshot_utils::{
self, ArchiveFormat, SnapshotVersion, SNAPSHOT_STATUS_CACHE_FILENAME, self, ArchiveFormat, SnapshotVersion, SNAPSHOT_STATUS_CACHE_FILENAME,
@ -309,7 +310,7 @@ mod tests {
// Create a packageable snapshot // Create a packageable snapshot
let slot = 42; let slot = 42;
let hash = Hash::default(); let hash = SnapshotHash(Hash::default());
let archive_format = ArchiveFormat::TarBzip2; let archive_format = ArchiveFormat::TarBzip2;
let output_tar_path = snapshot_utils::build_full_snapshot_archive_path( let output_tar_path = snapshot_utils::build_full_snapshot_archive_path(
&full_snapshot_archives_dir, &full_snapshot_archives_dir,

View File

@ -24,6 +24,7 @@ use {
runtime_config::RuntimeConfig, runtime_config::RuntimeConfig,
snapshot_archive_info::FullSnapshotArchiveInfo, snapshot_archive_info::FullSnapshotArchiveInfo,
snapshot_config::SnapshotConfig, snapshot_config::SnapshotConfig,
snapshot_hash::SnapshotHash,
snapshot_package::{ snapshot_package::{
AccountsPackage, AccountsPackageType, PendingSnapshotPackage, SnapshotPackage, AccountsPackage, AccountsPackageType, PendingSnapshotPackage, SnapshotPackage,
SnapshotType, SnapshotType,
@ -149,7 +150,7 @@ fn restore_from_snapshot(
let full_snapshot_archive_path = snapshot_utils::build_full_snapshot_archive_path( let full_snapshot_archive_path = snapshot_utils::build_full_snapshot_archive_path(
full_snapshot_archives_dir, full_snapshot_archives_dir,
old_last_bank.slot(), old_last_bank.slot(),
&old_last_bank.get_accounts_hash(), &old_last_bank.get_snapshot_hash(),
ArchiveFormat::TarBzip2, ArchiveFormat::TarBzip2,
); );
let full_snapshot_archive_info = let full_snapshot_archive_info =
@ -467,7 +468,7 @@ fn test_concurrent_snapshot_packaging(
slot, slot,
// this needs to match the hash value that we reserialize with later. It is complicated, so just use default. // this needs to match the hash value that we reserialize with later. It is complicated, so just use default.
// This hash value is just used to build the file name. Since this is mocked up test code, it is sufficient to pass default here. // This hash value is just used to build the file name. Since this is mocked up test code, it is sufficient to pass default here.
&Hash::default(), &SnapshotHash(Hash::default()),
ArchiveFormat::TarBzip2, ArchiveFormat::TarBzip2,
)); ));
} }

View File

@ -4,10 +4,11 @@ use {
indicatif::{ProgressBar, ProgressStyle}, indicatif::{ProgressBar, ProgressStyle},
log::*, log::*,
solana_runtime::{ solana_runtime::{
snapshot_hash::SnapshotHash,
snapshot_package::SnapshotType, snapshot_package::SnapshotType,
snapshot_utils::{self, ArchiveFormat}, snapshot_utils::{self, ArchiveFormat},
}, },
solana_sdk::{clock::Slot, genesis_config::DEFAULT_GENESIS_ARCHIVE, hash::Hash}, solana_sdk::{clock::Slot, genesis_config::DEFAULT_GENESIS_ARCHIVE},
std::{ std::{
fs::{self, File}, fs::{self, File},
io::{self, Read}, io::{self, Read},
@ -260,7 +261,7 @@ pub fn download_snapshot_archive<'a, 'b>(
rpc_addr: &SocketAddr, rpc_addr: &SocketAddr,
full_snapshot_archives_dir: &Path, full_snapshot_archives_dir: &Path,
incremental_snapshot_archives_dir: &Path, incremental_snapshot_archives_dir: &Path,
desired_snapshot_hash: (Slot, Hash), desired_snapshot_hash: (Slot, SnapshotHash),
snapshot_type: SnapshotType, snapshot_type: SnapshotType,
maximum_full_snapshot_archives_to_retain: usize, maximum_full_snapshot_archives_to_retain: usize,
maximum_incremental_snapshot_archives_to_retain: usize, maximum_incremental_snapshot_archives_to_retain: usize,

View File

@ -231,7 +231,7 @@ fn bank_forks_from_snapshot(
let full_snapshot_hash = FullSnapshotHash { let full_snapshot_hash = FullSnapshotHash {
hash: ( hash: (
full_snapshot_archive_info.slot(), full_snapshot_archive_info.slot(),
*full_snapshot_archive_info.hash(), full_snapshot_archive_info.hash().0,
), ),
}; };
let starting_incremental_snapshot_hash = let starting_incremental_snapshot_hash =
@ -240,7 +240,7 @@ fn bank_forks_from_snapshot(
base: full_snapshot_hash.hash, base: full_snapshot_hash.hash,
hash: ( hash: (
incremental_snapshot_archive_info.slot(), incremental_snapshot_archive_info.slot(),
*incremental_snapshot_archive_info.hash(), incremental_snapshot_archive_info.hash().0,
), ),
} }
}); });

View File

@ -60,6 +60,7 @@ use {
message_processor::MessageProcessor, message_processor::MessageProcessor,
rent_collector::{CollectedInfo, RentCollector}, rent_collector::{CollectedInfo, RentCollector},
runtime_config::RuntimeConfig, runtime_config::RuntimeConfig,
snapshot_hash::SnapshotHash,
stake_account::{self, StakeAccount}, stake_account::{self, StakeAccount},
stake_weighted_timestamp::{ stake_weighted_timestamp::{
calculate_stake_weighted_timestamp, MaxAllowableDrift, calculate_stake_weighted_timestamp, MaxAllowableDrift,
@ -6972,6 +6973,11 @@ impl Bank {
self.rc.accounts.accounts_db.get_accounts_hash(self.slot) self.rc.accounts.accounts_db.get_accounts_hash(self.slot)
} }
pub fn get_snapshot_hash(&self) -> SnapshotHash {
let accounts_hash = self.get_accounts_hash();
SnapshotHash::new(&accounts_hash)
}
pub fn get_thread_pool(&self) -> &ThreadPool { pub fn get_thread_pool(&self) -> &ThreadPool {
&self.rc.accounts.accounts_db.thread_pool_clean &self.rc.accounts.accounts_db.thread_pool_clean
} }

View File

@ -1,8 +1,11 @@
//! Information about snapshot archives //! Information about snapshot archives
use { use {
crate::snapshot_utils::{self, ArchiveFormat, Result}, crate::{
solana_sdk::{clock::Slot, hash::Hash}, snapshot_hash::SnapshotHash,
snapshot_utils::{self, ArchiveFormat, Result},
},
solana_sdk::clock::Slot,
std::{cmp::Ordering, path::PathBuf}, std::{cmp::Ordering, path::PathBuf},
}; };
@ -18,7 +21,7 @@ pub trait SnapshotArchiveInfoGetter {
self.snapshot_archive_info().slot self.snapshot_archive_info().slot
} }
fn hash(&self) -> &Hash { fn hash(&self) -> &SnapshotHash {
&self.snapshot_archive_info().hash &self.snapshot_archive_info().hash
} }
@ -45,8 +48,8 @@ pub struct SnapshotArchiveInfo {
/// Slot that the snapshot was made /// Slot that the snapshot was made
pub slot: Slot, pub slot: Slot,
/// Hash of the accounts at this slot /// Hash for the snapshot
pub hash: Hash, pub hash: SnapshotHash,
/// Archive format for the snapshot file /// Archive format for the snapshot file
pub archive_format: ArchiveFormat, pub archive_format: ArchiveFormat,

View File

@ -42,3 +42,17 @@ pub struct IncrementalSnapshotHashes {
pub base: (Slot, Hash), pub base: (Slot, Hash),
pub hashes: Vec<(Slot, Hash)>, pub hashes: Vec<(Slot, Hash)>,
} }
/// The hash used for snapshot archives
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub struct SnapshotHash(pub Hash);
impl SnapshotHash {
/// Make a snapshot hash from an accounts hash
///
/// Will soon also incorporate the epoch accounts hash
#[must_use]
pub fn new(accounts_hash: &Hash) -> Self {
Self(*accounts_hash)
}
}

View File

@ -5,6 +5,7 @@ use {
bank::{Bank, BankSlotDelta}, bank::{Bank, BankSlotDelta},
rent_collector::RentCollector, rent_collector::RentCollector,
snapshot_archive_info::{SnapshotArchiveInfo, SnapshotArchiveInfoGetter}, snapshot_archive_info::{SnapshotArchiveInfo, SnapshotArchiveInfoGetter},
snapshot_hash::SnapshotHash,
snapshot_utils::{ snapshot_utils::{
self, ArchiveFormat, BankSnapshotInfo, Result, SnapshotVersion, self, ArchiveFormat, BankSnapshotInfo, Result, SnapshotVersion,
TMP_BANK_SNAPSHOT_PREFIX, TMP_BANK_SNAPSHOT_PREFIX,
@ -182,6 +183,7 @@ pub struct SnapshotPackage {
impl SnapshotPackage { impl SnapshotPackage {
pub fn new(accounts_package: AccountsPackage, accounts_hash: Hash) -> Self { pub fn new(accounts_package: AccountsPackage, accounts_hash: Hash) -> Self {
let snapshot_hash = SnapshotHash::new(&accounts_hash);
let mut snapshot_storages = accounts_package.snapshot_storages; let mut snapshot_storages = accounts_package.snapshot_storages;
let (snapshot_type, snapshot_archive_path) = match accounts_package.package_type { let (snapshot_type, snapshot_archive_path) = match accounts_package.package_type {
AccountsPackageType::Snapshot(snapshot_type) => match snapshot_type { AccountsPackageType::Snapshot(snapshot_type) => match snapshot_type {
@ -190,7 +192,7 @@ impl SnapshotPackage {
snapshot_utils::build_full_snapshot_archive_path( snapshot_utils::build_full_snapshot_archive_path(
accounts_package.full_snapshot_archives_dir, accounts_package.full_snapshot_archives_dir,
accounts_package.slot, accounts_package.slot,
&accounts_hash, &snapshot_hash,
accounts_package.archive_format, accounts_package.archive_format,
), ),
), ),
@ -213,7 +215,7 @@ impl SnapshotPackage {
accounts_package.incremental_snapshot_archives_dir, accounts_package.incremental_snapshot_archives_dir,
incremental_snapshot_base_slot, incremental_snapshot_base_slot,
accounts_package.slot, accounts_package.slot,
&accounts_hash, &snapshot_hash,
accounts_package.archive_format, accounts_package.archive_format,
), ),
) )
@ -228,7 +230,7 @@ impl SnapshotPackage {
snapshot_archive_info: SnapshotArchiveInfo { snapshot_archive_info: SnapshotArchiveInfo {
path: snapshot_archive_path, path: snapshot_archive_path,
slot: accounts_package.slot, slot: accounts_package.slot,
hash: accounts_hash, hash: snapshot_hash,
archive_format: accounts_package.archive_format, archive_format: accounts_package.archive_format,
}, },
block_height: accounts_package.block_height, block_height: accounts_package.block_height,

View File

@ -1,14 +1,17 @@
use { use {
crate::{ crate::{
accounts_db::{ accounts_db::{
AccountShrinkThreshold, AccountsDbConfig, CalcAccountsHashDataSource, SnapshotStorage, AccountShrinkThreshold, AccountStorageMap, AccountsDbConfig, AtomicAppendVecId,
SnapshotStorages, CalcAccountsHashDataSource, SnapshotStorage, SnapshotStorages,
}, },
accounts_index::AccountSecondaryIndexes, accounts_index::AccountSecondaryIndexes,
accounts_update_notifier_interface::AccountsUpdateNotifier, accounts_update_notifier_interface::AccountsUpdateNotifier,
bank::{Bank, BankFieldsToDeserialize, BankSlotDelta}, bank::{Bank, BankFieldsToDeserialize, BankSlotDelta},
builtins::Builtins, builtins::Builtins,
hardened_unpack::{unpack_snapshot, ParallelSelector, UnpackError, UnpackedAppendVecMap}, hardened_unpack::{
streaming_unpack_snapshot, unpack_snapshot, ParallelSelector, UnpackError,
UnpackedAppendVecMap,
},
runtime_config::RuntimeConfig, runtime_config::RuntimeConfig,
serde_snapshot::{ serde_snapshot::{
bank_from_streams, bank_to_stream, fields_from_streams, SerdeStyle, SnapshotStreams, bank_from_streams, bank_to_stream, fields_from_streams, SerdeStyle, SnapshotStreams,
@ -17,12 +20,16 @@ use {
snapshot_archive_info::{ snapshot_archive_info::{
FullSnapshotArchiveInfo, IncrementalSnapshotArchiveInfo, SnapshotArchiveInfoGetter, FullSnapshotArchiveInfo, IncrementalSnapshotArchiveInfo, SnapshotArchiveInfoGetter,
}, },
snapshot_hash::SnapshotHash,
snapshot_package::{AccountsPackage, AccountsPackageType, SnapshotPackage, SnapshotType}, snapshot_package::{AccountsPackage, AccountsPackageType, SnapshotPackage, SnapshotType},
snapshot_utils::snapshot_storage_rebuilder::SnapshotStorageRebuilder, snapshot_utils::snapshot_storage_rebuilder::{
RebuiltSnapshotStorage, SnapshotStorageRebuilder,
},
status_cache, status_cache,
}, },
bincode::{config::Options, serialize_into}, bincode::{config::Options, serialize_into},
bzip2::bufread::BzDecoder, bzip2::bufread::BzDecoder,
crossbeam_channel::Sender,
flate2::read::GzDecoder, flate2::read::GzDecoder,
lazy_static::lazy_static, lazy_static::lazy_static,
log::*, log::*,
@ -49,6 +56,7 @@ use {
atomic::{AtomicBool, AtomicU32}, atomic::{AtomicBool, AtomicU32},
Arc, Arc,
}, },
thread::{Builder, JoinHandle},
}, },
tar::{self, Archive}, tar::{self, Archive},
tempfile::TempDir, tempfile::TempDir,
@ -58,15 +66,6 @@ use {
mod archive_format; mod archive_format;
mod snapshot_storage_rebuilder; mod snapshot_storage_rebuilder;
pub use archive_format::*; pub use archive_format::*;
use {
crate::{
accounts_db::{AccountStorageMap, AtomicAppendVecId},
hardened_unpack::streaming_unpack_snapshot,
snapshot_utils::snapshot_storage_rebuilder::RebuiltSnapshotStorage,
},
crossbeam_channel::Sender,
std::thread::{Builder, JoinHandle},
};
pub const SNAPSHOT_STATUS_CACHE_FILENAME: &str = "status_cache"; pub const SNAPSHOT_STATUS_CACHE_FILENAME: &str = "status_cache";
pub const SNAPSHOT_ARCHIVE_DOWNLOAD_DIR: &str = "remote"; pub const SNAPSHOT_ARCHIVE_DOWNLOAD_DIR: &str = "remote";
@ -245,7 +244,7 @@ pub enum SnapshotError {
NoSnapshotArchives, NoSnapshotArchives,
#[error("snapshot has mismatch: deserialized bank: {:?}, snapshot archive info: {:?}", .0, .1)] #[error("snapshot has mismatch: deserialized bank: {:?}, snapshot archive info: {:?}", .0, .1)]
MismatchedSlotHash((Slot, Hash), (Slot, Hash)), MismatchedSlotHash((Slot, SnapshotHash), (Slot, SnapshotHash)),
#[error("snapshot slot deltas are invalid: {0}")] #[error("snapshot slot deltas are invalid: {0}")]
VerifySlotDeltas(#[from] VerifySlotDeltasError), VerifySlotDeltas(#[from] VerifySlotDeltasError),
@ -1152,10 +1151,10 @@ pub fn bank_from_latest_snapshot_archives(
fn verify_bank_against_expected_slot_hash( fn verify_bank_against_expected_slot_hash(
bank: &Bank, bank: &Bank,
expected_slot: Slot, expected_slot: Slot,
expected_hash: Hash, expected_hash: SnapshotHash,
) -> Result<()> { ) -> Result<()> {
let bank_slot = bank.slot(); let bank_slot = bank.slot();
let bank_hash = bank.get_accounts_hash(); let bank_hash = bank.get_snapshot_hash();
if bank_slot != expected_slot || bank_hash != expected_hash { if bank_slot != expected_slot || bank_hash != expected_hash {
return Err(SnapshotError::MismatchedSlotHash( return Err(SnapshotError::MismatchedSlotHash(
@ -1357,13 +1356,13 @@ pub fn build_snapshot_archives_remote_dir(snapshot_archives_dir: impl AsRef<Path
pub fn build_full_snapshot_archive_path( pub fn build_full_snapshot_archive_path(
full_snapshot_archives_dir: impl AsRef<Path>, full_snapshot_archives_dir: impl AsRef<Path>,
slot: Slot, slot: Slot,
hash: &Hash, hash: &SnapshotHash,
archive_format: ArchiveFormat, archive_format: ArchiveFormat,
) -> PathBuf { ) -> PathBuf {
full_snapshot_archives_dir.as_ref().join(format!( full_snapshot_archives_dir.as_ref().join(format!(
"snapshot-{}-{}.{}", "snapshot-{}-{}.{}",
slot, slot,
hash, hash.0,
archive_format.extension(), archive_format.extension(),
)) ))
} }
@ -1375,14 +1374,14 @@ pub fn build_incremental_snapshot_archive_path(
incremental_snapshot_archives_dir: impl AsRef<Path>, incremental_snapshot_archives_dir: impl AsRef<Path>,
base_slot: Slot, base_slot: Slot,
slot: Slot, slot: Slot,
hash: &Hash, hash: &SnapshotHash,
archive_format: ArchiveFormat, archive_format: ArchiveFormat,
) -> PathBuf { ) -> PathBuf {
incremental_snapshot_archives_dir.as_ref().join(format!( incremental_snapshot_archives_dir.as_ref().join(format!(
"incremental-snapshot-{}-{}-{}.{}", "incremental-snapshot-{}-{}-{}.{}",
base_slot, base_slot,
slot, slot,
hash, hash.0,
archive_format.extension(), archive_format.extension(),
)) ))
} }
@ -1390,7 +1389,7 @@ pub fn build_incremental_snapshot_archive_path(
/// Parse a full snapshot archive filename into its Slot, Hash, and Archive Format /// Parse a full snapshot archive filename into its Slot, Hash, and Archive Format
pub(crate) fn parse_full_snapshot_archive_filename( pub(crate) fn parse_full_snapshot_archive_filename(
archive_filename: &str, archive_filename: &str,
) -> Result<(Slot, Hash, ArchiveFormat)> { ) -> Result<(Slot, SnapshotHash, ArchiveFormat)> {
lazy_static! { lazy_static! {
static ref RE: Regex = Regex::new(FULL_SNAPSHOT_ARCHIVE_FILENAME_REGEX).unwrap(); static ref RE: Regex = Regex::new(FULL_SNAPSHOT_ARCHIVE_FILENAME_REGEX).unwrap();
} }
@ -1410,7 +1409,7 @@ pub(crate) fn parse_full_snapshot_archive_filename(
.map(|x| x.as_str().parse::<ArchiveFormat>())? .map(|x| x.as_str().parse::<ArchiveFormat>())?
.ok()?; .ok()?;
Some((slot, hash, archive_format)) Some((slot, SnapshotHash(hash), archive_format))
}) })
}; };
@ -1422,7 +1421,7 @@ pub(crate) fn parse_full_snapshot_archive_filename(
/// Parse an incremental snapshot archive filename into its base Slot, actual Slot, Hash, and Archive Format /// Parse an incremental snapshot archive filename into its base Slot, actual Slot, Hash, and Archive Format
pub(crate) fn parse_incremental_snapshot_archive_filename( pub(crate) fn parse_incremental_snapshot_archive_filename(
archive_filename: &str, archive_filename: &str,
) -> Result<(Slot, Slot, Hash, ArchiveFormat)> { ) -> Result<(Slot, Slot, SnapshotHash, ArchiveFormat)> {
lazy_static! { lazy_static! {
static ref RE: Regex = Regex::new(INCREMENTAL_SNAPSHOT_ARCHIVE_FILENAME_REGEX).unwrap(); static ref RE: Regex = Regex::new(INCREMENTAL_SNAPSHOT_ARCHIVE_FILENAME_REGEX).unwrap();
} }
@ -1446,7 +1445,7 @@ pub(crate) fn parse_incremental_snapshot_archive_filename(
.map(|x| x.as_str().parse::<ArchiveFormat>())? .map(|x| x.as_str().parse::<ArchiveFormat>())?
.ok()?; .ok()?;
Some((base_slot, slot, hash, archive_format)) Some((base_slot, slot, SnapshotHash(hash), archive_format))
}) })
}; };
@ -2542,7 +2541,7 @@ mod tests {
Hash::default() Hash::default()
)) ))
.unwrap(), .unwrap(),
(42, Hash::default(), ArchiveFormat::TarBzip2) (42, SnapshotHash(Hash::default()), ArchiveFormat::TarBzip2)
); );
assert_eq!( assert_eq!(
parse_full_snapshot_archive_filename(&format!( parse_full_snapshot_archive_filename(&format!(
@ -2550,12 +2549,12 @@ mod tests {
Hash::default() Hash::default()
)) ))
.unwrap(), .unwrap(),
(43, Hash::default(), ArchiveFormat::TarZstd) (43, SnapshotHash(Hash::default()), ArchiveFormat::TarZstd)
); );
assert_eq!( assert_eq!(
parse_full_snapshot_archive_filename(&format!("snapshot-44-{}.tar", Hash::default())) parse_full_snapshot_archive_filename(&format!("snapshot-44-{}.tar", Hash::default()))
.unwrap(), .unwrap(),
(44, Hash::default(), ArchiveFormat::Tar) (44, SnapshotHash(Hash::default()), ArchiveFormat::Tar)
); );
assert_eq!( assert_eq!(
parse_full_snapshot_archive_filename(&format!( parse_full_snapshot_archive_filename(&format!(
@ -2563,7 +2562,7 @@ mod tests {
Hash::default() Hash::default()
)) ))
.unwrap(), .unwrap(),
(45, Hash::default(), ArchiveFormat::TarLz4) (45, SnapshotHash(Hash::default()), ArchiveFormat::TarLz4)
); );
assert!(parse_full_snapshot_archive_filename("invalid").is_err()); assert!(parse_full_snapshot_archive_filename("invalid").is_err());
@ -2615,7 +2614,12 @@ mod tests {
Hash::default() Hash::default()
)) ))
.unwrap(), .unwrap(),
(42, 123, Hash::default(), ArchiveFormat::TarBzip2) (
42,
123,
SnapshotHash(Hash::default()),
ArchiveFormat::TarBzip2
)
); );
assert_eq!( assert_eq!(
parse_incremental_snapshot_archive_filename(&format!( parse_incremental_snapshot_archive_filename(&format!(
@ -2623,7 +2627,12 @@ mod tests {
Hash::default() Hash::default()
)) ))
.unwrap(), .unwrap(),
(43, 234, Hash::default(), ArchiveFormat::TarZstd) (
43,
234,
SnapshotHash(Hash::default()),
ArchiveFormat::TarZstd
)
); );
assert_eq!( assert_eq!(
parse_incremental_snapshot_archive_filename(&format!( parse_incremental_snapshot_archive_filename(&format!(
@ -2631,7 +2640,7 @@ mod tests {
Hash::default() Hash::default()
)) ))
.unwrap(), .unwrap(),
(44, 345, Hash::default(), ArchiveFormat::Tar) (44, 345, SnapshotHash(Hash::default()), ArchiveFormat::Tar)
); );
assert_eq!( assert_eq!(
parse_incremental_snapshot_archive_filename(&format!( parse_incremental_snapshot_archive_filename(&format!(
@ -2639,7 +2648,12 @@ mod tests {
Hash::default() Hash::default()
)) ))
.unwrap(), .unwrap(),
(45, 456, Hash::default(), ArchiveFormat::TarLz4) (
45,
456,
SnapshotHash(Hash::default()),
ArchiveFormat::TarLz4
)
); );
assert!(parse_incremental_snapshot_archive_filename("invalid").is_err()); assert!(parse_incremental_snapshot_archive_filename("invalid").is_err());

View File

@ -717,8 +717,8 @@ fn get_highest_local_snapshot_hash(
incremental_snapshot_archives_dir: impl AsRef<Path>, incremental_snapshot_archives_dir: impl AsRef<Path>,
incremental_snapshot_fetch: bool, incremental_snapshot_fetch: bool,
) -> Option<(Slot, Hash)> { ) -> Option<(Slot, Hash)> {
snapshot_utils::get_highest_full_snapshot_archive_info(full_snapshot_archives_dir).and_then( snapshot_utils::get_highest_full_snapshot_archive_info(full_snapshot_archives_dir)
|full_snapshot_info| { .and_then(|full_snapshot_info| {
if incremental_snapshot_fetch { if incremental_snapshot_fetch {
snapshot_utils::get_highest_incremental_snapshot_archive_info( snapshot_utils::get_highest_incremental_snapshot_archive_info(
incremental_snapshot_archives_dir, incremental_snapshot_archives_dir,
@ -734,8 +734,8 @@ fn get_highest_local_snapshot_hash(
None None
} }
.or_else(|| Some((full_snapshot_info.slot(), *full_snapshot_info.hash()))) .or_else(|| Some((full_snapshot_info.slot(), *full_snapshot_info.hash())))
}, })
) .map(|(slot, snapshot_hash)| (slot, snapshot_hash.0))
} }
/// Get peer snapshot hashes /// Get peer snapshot hashes
@ -1171,7 +1171,7 @@ fn download_snapshots(
.into_iter() .into_iter()
.any(|snapshot_archive| { .any(|snapshot_archive| {
snapshot_archive.slot() == full_snapshot_hash.0 snapshot_archive.slot() == full_snapshot_hash.0
&& snapshot_archive.hash() == &full_snapshot_hash.1 && snapshot_archive.hash().0 == full_snapshot_hash.1
}) })
{ {
info!( info!(
@ -1201,7 +1201,7 @@ fn download_snapshots(
.into_iter() .into_iter()
.any(|snapshot_archive| { .any(|snapshot_archive| {
snapshot_archive.slot() == incremental_snapshot_hash.0 snapshot_archive.slot() == incremental_snapshot_hash.0
&& snapshot_archive.hash() == &incremental_snapshot_hash.1 && snapshot_archive.hash().0 == incremental_snapshot_hash.1
&& snapshot_archive.base_slot() == full_snapshot_hash.0 && snapshot_archive.base_slot() == full_snapshot_hash.0
}) })
{ {
@ -1262,6 +1262,10 @@ fn download_snapshot(
slot: desired_snapshot_hash.0, slot: desired_snapshot_hash.0,
rpc_addr: rpc_contact_info.rpc, rpc_addr: rpc_contact_info.rpc,
}; };
let desired_snapshot_hash = (
desired_snapshot_hash.0,
solana_runtime::snapshot_hash::SnapshotHash(desired_snapshot_hash.1),
);
download_snapshot_archive( download_snapshot_archive(
&rpc_contact_info.rpc, &rpc_contact_info.rpc,
full_snapshot_archives_dir, full_snapshot_archives_dir,