Abort if a snapshot download fails for any reason other than 404

This commit is contained in:
Michael Vines 2020-01-17 12:12:34 -07:00
parent 182e4cec86
commit e28508ad56
1 changed files with 16 additions and 7 deletions

View File

@ -79,7 +79,7 @@ fn download_tar_bz2(
rpc_addr: &SocketAddr, rpc_addr: &SocketAddr,
archive_name: &str, archive_name: &str,
download_path: &Path, download_path: &Path,
extract: bool, is_snapshot: bool,
) -> Result<(), String> { ) -> Result<(), String> {
let archive_path = download_path.join(archive_name); let archive_path = download_path.join(archive_name);
if archive_path.is_file() { if archive_path.is_file() {
@ -103,7 +103,16 @@ fn download_tar_bz2(
let response = client let response = client
.get(url.as_str()) .get(url.as_str())
.send() .send()
.and_then(|response| response.error_for_status()) .map_err(|err| err.to_string())?;
if is_snapshot && response.status() == reqwest::StatusCode::NOT_FOUND {
progress_bar.finish_and_clear();
warn!("Snapshot not found at {}", url);
return Ok(());
}
let response = response
.error_for_status()
.map_err(|err| format!("Unable to get: {:?}", err))?; .map_err(|err| format!("Unable to get: {:?}", err))?;
let download_size = { let download_size = {
response response
@ -162,7 +171,7 @@ fn download_tar_bz2(
) )
); );
if extract { if !is_snapshot {
info!("Extracting {:?}...", archive_path); info!("Extracting {:?}...", archive_path);
let extract_start = Instant::now(); let extract_start = Instant::now();
let tar_bz2 = File::open(&temp_archive_path) let tar_bz2 = File::open(&temp_archive_path)
@ -294,21 +303,21 @@ fn download_ledger(
ledger_path: &Path, ledger_path: &Path,
no_snapshot_fetch: bool, no_snapshot_fetch: bool,
) -> Result<(), String> { ) -> Result<(), String> {
download_tar_bz2(rpc_addr, "genesis.tar.bz2", ledger_path, true)?; download_tar_bz2(rpc_addr, "genesis.tar.bz2", ledger_path, false)?;
if !no_snapshot_fetch { if !no_snapshot_fetch {
let snapshot_package = solana_ledger::snapshot_utils::get_snapshot_tar_path(ledger_path); let snapshot_package = solana_ledger::snapshot_utils::get_snapshot_tar_path(ledger_path);
if snapshot_package.exists() { if snapshot_package.exists() {
fs::remove_file(&snapshot_package) fs::remove_file(&snapshot_package)
.unwrap_or_else(|err| warn!("error removing {:?}: {}", snapshot_package, err)); .map_err(|err| format!("error removing {:?}: {}", snapshot_package, err))?;
} }
download_tar_bz2( download_tar_bz2(
rpc_addr, rpc_addr,
snapshot_package.file_name().unwrap().to_str().unwrap(), snapshot_package.file_name().unwrap().to_str().unwrap(),
snapshot_package.parent().unwrap(), snapshot_package.parent().unwrap(),
false, true,
) )
.unwrap_or_else(|err| warn!("Unable to fetch snapshot: {:?}", err)); .map_err(|err| format!("Failed to fetch snapshot: {:?}", err))?;
} }
Ok(()) Ok(())