Make SnapshotPackagerService aware of Incremental Snapshots (#19254)
Add a field to SnapshotPackage that is an enum for SnapshotType, so archive_snapshot_package() will do the right thing. Fixes #19166
This commit is contained in:
@ -4,14 +4,15 @@
|
||||
// hash on gossip. Monitor gossip for messages from validators in the --trusted-validators
|
||||
// set and halt the node if a mismatch is detected.
|
||||
|
||||
use crate::snapshot_packager_service::PendingSnapshotPackage;
|
||||
use rayon::ThreadPool;
|
||||
use solana_gossip::cluster_info::{ClusterInfo, MAX_SNAPSHOT_HASHES};
|
||||
use solana_runtime::{
|
||||
accounts_db,
|
||||
snapshot_archive_info::SnapshotArchiveInfoGetter,
|
||||
snapshot_config::SnapshotConfig,
|
||||
snapshot_package::{AccountsPackage, AccountsPackageReceiver, SnapshotPackage},
|
||||
snapshot_package::{
|
||||
AccountsPackage, AccountsPackageReceiver, PendingSnapshotPackage, SnapshotPackage,
|
||||
},
|
||||
snapshot_utils,
|
||||
};
|
||||
use solana_sdk::{clock::Slot, hash::Hash, pubkey::Pubkey};
|
||||
@ -222,7 +223,10 @@ impl AccountsHashVerifier {
|
||||
mod tests {
|
||||
use super::*;
|
||||
use solana_gossip::{cluster_info::make_accounts_hashes_message, contact_info::ContactInfo};
|
||||
use solana_runtime::snapshot_utils::{ArchiveFormat, SnapshotVersion};
|
||||
use solana_runtime::{
|
||||
snapshot_package::SnapshotType,
|
||||
snapshot_utils::{ArchiveFormat, SnapshotVersion},
|
||||
};
|
||||
use solana_sdk::{
|
||||
hash::hash,
|
||||
signature::{Keypair, Signer},
|
||||
@ -314,6 +318,7 @@ mod tests {
|
||||
hash,
|
||||
archive_format,
|
||||
snapshot_version,
|
||||
SnapshotType::FullSnapshot,
|
||||
);
|
||||
|
||||
AccountsHashVerifier::process_snapshot_package(
|
||||
|
@ -1,20 +1,18 @@
|
||||
use solana_gossip::cluster_info::{ClusterInfo, MAX_SNAPSHOT_HASHES};
|
||||
use solana_runtime::{
|
||||
snapshot_archive_info::SnapshotArchiveInfoGetter, snapshot_package::SnapshotPackage,
|
||||
snapshot_archive_info::SnapshotArchiveInfoGetter, snapshot_package::PendingSnapshotPackage,
|
||||
snapshot_utils,
|
||||
};
|
||||
use solana_sdk::{clock::Slot, hash::Hash};
|
||||
use std::{
|
||||
sync::{
|
||||
atomic::{AtomicBool, Ordering},
|
||||
Arc, Mutex,
|
||||
Arc,
|
||||
},
|
||||
thread::{self, Builder, JoinHandle},
|
||||
time::Duration,
|
||||
};
|
||||
|
||||
pub type PendingSnapshotPackage = Arc<Mutex<Option<SnapshotPackage>>>;
|
||||
|
||||
pub struct SnapshotPackagerService {
|
||||
t_snapshot_packager: JoinHandle<()>,
|
||||
}
|
||||
@ -45,18 +43,21 @@ impl SnapshotPackagerService {
|
||||
|
||||
let snapshot_package = pending_snapshot_package.lock().unwrap().take();
|
||||
if let Some(snapshot_package) = snapshot_package {
|
||||
if let Err(err) = snapshot_utils::archive_snapshot_package(
|
||||
match snapshot_utils::archive_snapshot_package(
|
||||
&snapshot_package,
|
||||
maximum_snapshots_to_retain,
|
||||
) {
|
||||
warn!("Failed to create snapshot archive: {}", err);
|
||||
} else {
|
||||
hashes.push((snapshot_package.slot(), *snapshot_package.hash()));
|
||||
while hashes.len() > MAX_SNAPSHOT_HASHES {
|
||||
hashes.remove(0);
|
||||
Ok(_) => {
|
||||
hashes.push((snapshot_package.slot(), *snapshot_package.hash()));
|
||||
while hashes.len() > MAX_SNAPSHOT_HASHES {
|
||||
hashes.remove(0);
|
||||
}
|
||||
cluster_info.push_snapshot_hashes(hashes.clone());
|
||||
}
|
||||
cluster_info.push_snapshot_hashes(hashes.clone());
|
||||
}
|
||||
Err(err) => {
|
||||
warn!("Failed to create snapshot archive: {}", err);
|
||||
}
|
||||
};
|
||||
} else {
|
||||
std::thread::sleep(Duration::from_millis(100));
|
||||
}
|
||||
@ -81,7 +82,7 @@ mod tests {
|
||||
use solana_runtime::{
|
||||
accounts_db::AccountStorageEntry,
|
||||
bank::BankSlotDelta,
|
||||
snapshot_package::SnapshotPackage,
|
||||
snapshot_package::{SnapshotPackage, SnapshotType},
|
||||
snapshot_utils::{self, ArchiveFormat, SnapshotVersion, SNAPSHOT_STATUS_CACHE_FILE_NAME},
|
||||
};
|
||||
use solana_sdk::hash::Hash;
|
||||
@ -175,6 +176,7 @@ mod tests {
|
||||
Hash::default(),
|
||||
ArchiveFormat::TarBzip2,
|
||||
SnapshotVersion::default(),
|
||||
SnapshotType::FullSnapshot,
|
||||
);
|
||||
|
||||
// Make tarball from packageable snapshot
|
||||
|
@ -21,7 +21,6 @@ use crate::{
|
||||
shred_fetch_stage::ShredFetchStage,
|
||||
sigverify_shreds::ShredSigVerifier,
|
||||
sigverify_stage::SigVerifyStage,
|
||||
snapshot_packager_service::PendingSnapshotPackage,
|
||||
tower_storage::TowerStorage,
|
||||
voting_service::VotingService,
|
||||
};
|
||||
@ -45,6 +44,7 @@ use solana_runtime::{
|
||||
bank_forks::BankForks,
|
||||
commitment::BlockCommitmentCache,
|
||||
snapshot_config::SnapshotConfig,
|
||||
snapshot_package::PendingSnapshotPackage,
|
||||
vote_sender_types::ReplayVoteSender,
|
||||
};
|
||||
use solana_sdk::{pubkey::Pubkey, signature::Keypair};
|
||||
|
@ -13,7 +13,7 @@ use {
|
||||
serve_repair::ServeRepair,
|
||||
serve_repair_service::ServeRepairService,
|
||||
sigverify,
|
||||
snapshot_packager_service::{PendingSnapshotPackage, SnapshotPackagerService},
|
||||
snapshot_packager_service::SnapshotPackagerService,
|
||||
tower_storage::TowerStorage,
|
||||
tpu::{Tpu, DEFAULT_TPU_COALESCE_MS},
|
||||
tvu::{Sockets, Tvu, TvuConfig},
|
||||
@ -65,6 +65,7 @@ use {
|
||||
hardened_unpack::{open_genesis_config, MAX_GENESIS_ARCHIVE_UNPACKED_SIZE},
|
||||
snapshot_archive_info::SnapshotArchiveInfoGetter,
|
||||
snapshot_config::SnapshotConfig,
|
||||
snapshot_package::PendingSnapshotPackage,
|
||||
snapshot_utils,
|
||||
},
|
||||
solana_sdk::{
|
||||
|
Reference in New Issue
Block a user