From 88462e67b51807faeb45cff0904c027b892f462e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 3 Jul 2021 00:27:42 +0000 Subject: [PATCH] Allow a `solana-validator` to join a cluster established by `solana-test-validator` (backport #18394) (#18399) * Report 404 instead of 502 when a snapshot file is not found This provides the client with more useful information about why their request failed (cherry picked from commit 40d696fcbcf5ddb6f01ad4da3215c9d126a85f94) * As a last resort try to download an uncompressed snapshot `solana-test-validator` creates uncompressed snapshots and it can be useful to attach another validator to a `solana-test-validator` cluster from time to time (cherry picked from commit e36247d187cb8730a0d4a10524c599fb16b2d228) Co-authored-by: Michael Vines --- download-utils/src/lib.rs | 15 +++++++++------ rpc/src/rpc_service.rs | 6 +++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/download-utils/src/lib.rs b/download-utils/src/lib.rs index da31b0d343..3fda667dea 100644 --- a/download-utils/src/lib.rs +++ b/download-utils/src/lib.rs @@ -258,6 +258,7 @@ pub fn download_snapshot<'a, 'b>( ArchiveFormat::TarZstd, ArchiveFormat::TarGzip, ArchiveFormat::TarBzip2, + ArchiveFormat::Tar, // `solana-test-validator` creates uncompressed snapshots ] { let desired_snapshot_package = snapshot_utils::get_snapshot_archive_path( snapshot_output_dir.to_path_buf(), @@ -269,7 +270,7 @@ pub fn download_snapshot<'a, 'b>( return Ok(()); } - if download_file( + match download_file( &format!( "http://{}/{}", rpc_addr, @@ -282,11 +283,13 @@ pub fn download_snapshot<'a, 'b>( &desired_snapshot_package, use_progress_bar, progress_notify_callback, - ) - .is_ok() - { - return Ok(()); + ) { + Ok(()) => return Ok(()), + Err(err) => info!("{}", err), } } - Err("Snapshot couldn't be downloaded".to_string()) + Err(format!( + "Failed to download a snapshot for slot {} from {}", + desired_snapshot_hash.0, rpc_addr + )) } diff --git a/rpc/src/rpc_service.rs b/rpc/src/rpc_service.rs index 98c67a37e1..17a101a7aa 100644 --- a/rpc/src/rpc_service.rs +++ b/rpc/src/rpc_service.rs @@ -165,7 +165,11 @@ impl RpcRequestMiddleware { should_validate_hosts: true, response: Box::pin(async { match Self::open_no_follow(filename).await { - Err(_) => Ok(Self::internal_server_error()), + Err(err) => Ok(if err.kind() == std::io::ErrorKind::NotFound { + Self::not_found() + } else { + Self::internal_server_error() + }), Ok(file) => { let stream = FramedRead::new(file, BytesCodec::new()).map_ok(|b| b.freeze());