From 3a501ad69eb75c15fbdea6b643bc0ae41d19d22a Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Tue, 17 Mar 2020 18:10:48 -0700 Subject: [PATCH] Remove all snapshot not matching the desired hash --- download-utils/src/lib.rs | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/download-utils/src/lib.rs b/download-utils/src/lib.rs index bf291e9bd5..d94966808e 100644 --- a/download-utils/src/lib.rs +++ b/download-utils/src/lib.rs @@ -173,20 +173,35 @@ pub fn download_genesis( pub fn download_snapshot( rpc_addr: &SocketAddr, ledger_path: &Path, - snapshot_hash: (Slot, Hash), + desired_snapshot_hash: (Slot, Hash), ) -> Result<(), String> { - let snapshot_package = - solana_ledger::snapshot_utils::get_snapshot_archive_path(ledger_path, &snapshot_hash); - if snapshot_package.exists() { + // Remove all snapshot not matching the desired hash + let snapshot_packages = solana_ledger::snapshot_utils::get_snapshot_archives(ledger_path); + for (snapshot_package, snapshot_hash) in snapshot_packages.iter() { + if snapshot_hash != desired_snapshot_hash { + fs::remove_file(snapshot_package) + .unwrap_or_else(|err| info!("Failed to remove old snapshot: {:}", err)); + } + } + + let desired_snapshot_package = solana_ledger::snapshot_utils::get_snapshot_archive_path( + ledger_path, + &desired_snapshot_hash, + ); + if desired_snapshot_package.exists() { Ok(()) } else { download_file( &format!( "http://{}/{}", rpc_addr, - snapshot_package.file_name().unwrap().to_str().unwrap() + desired_snapshot_package + .file_name() + .unwrap() + .to_str() + .unwrap() ), - &snapshot_package, + &desired_snapshot_package, ) } }