diff --git a/Cargo.lock b/Cargo.lock index b8d869de0b..1d841f2e7d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,21 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "ahash" version = "0.4.7" @@ -40,6 +55,9 @@ name = "anyhow" version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" +dependencies = [ + "backtrace", +] [[package]] name = "async-compression" @@ -149,6 +167,21 @@ dependencies = [ "anyhow", ] +[[package]] +name = "backtrace" +version = "0.3.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "321629d8ba6513061f26707241fa9bc89524ff1cd7a915a97ef0c62c666ce1b6" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "base64" version = "0.12.3" @@ -655,6 +688,12 @@ dependencies = [ "wasi", ] +[[package]] +name = "gimli" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" + [[package]] name = "git-version" version = "0.3.5" @@ -1048,6 +1087,16 @@ version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", +] + [[package]] name = "mio" version = "0.7.13" @@ -1144,6 +1193,15 @@ dependencies = [ "libc", ] +[[package]] +name = "object" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.8.0" @@ -1653,6 +1711,12 @@ dependencies = [ "url", ] +[[package]] +name = "rustc-demangle" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" + [[package]] name = "rustc-hash" version = "1.1.0" diff --git a/pageserver/Cargo.toml b/pageserver/Cargo.toml index 39d4fc918a..81df026ae8 100644 --- a/pageserver/Cargo.toml +++ b/pageserver/Cargo.toml @@ -24,7 +24,7 @@ postgres = { git = "https://github.com/zenithdb/rust-postgres.git", rev="9eb0dbf tokio-postgres = { git = "https://github.com/zenithdb/rust-postgres.git", rev="9eb0dbfbeb6a6c1b79099b9f7ae4a8c021877858" } tokio-stream = "0.1.8" routerify = "2" -anyhow = "1.0" +anyhow = { version = "1.0", features = ["backtrace"] } crc32c = "0.6.0" thiserror = "1.0" hex = { version = "0.4.3", features = ["serde"] } diff --git a/pageserver/src/page_service.rs b/pageserver/src/page_service.rs index 386e14b4bb..eab691c100 100644 --- a/pageserver/src/page_service.rs +++ b/pageserver/src/page_service.rs @@ -201,7 +201,7 @@ pub fn thread_main( .name("serving Page Service thread".into()) .spawn(move || { if let Err(err) = page_service_conn_main(conf, local_auth, socket, auth_type) { - error!(%err, "page server thread exited with error"); + error!("page server thread exited with error: {:?}", err); } }) .unwrap(); @@ -320,7 +320,7 @@ impl PageServerHandler { let response = response.unwrap_or_else(|e| { // print the all details to the log with {:#}, but for the client the // error message is enough - error!("error reading relation or page version: {:#}", e); + error!("error reading relation or page version: {:?}", e); PagestreamBeMessage::Error(PagestreamErrorResponse { message: e.to_string(), }) diff --git a/pageserver/src/remote_storage.rs b/pageserver/src/remote_storage.rs index 29a62ea08a..5d53d703ec 100644 --- a/pageserver/src/remote_storage.rs +++ b/pageserver/src/remote_storage.rs @@ -208,7 +208,7 @@ fn local_tenant_timeline_files( } } Err(e) => error!( - "Failed to list tenants dir entry {:?} in directory {}, reason: {:#}", + "Failed to list tenants dir entry {:?} in directory {}, reason: {:?}", tenants_dir_entry, tenants_dir.display(), e @@ -249,14 +249,14 @@ fn collect_timelines_for_tenant( ); } Err(e) => error!( - "Failed to process timeline dir contents at '{}', reason: {:#}", + "Failed to process timeline dir contents at '{}', reason: {:?}", timeline_path.display(), e ), } } Err(e) => error!( - "Failed to list timelines for entry tenant {}, reason: {:#}", + "Failed to list timelines for entry tenant {}, reason: {:?}", tenant_id, e ), } diff --git a/pageserver/src/remote_storage/storage_sync.rs b/pageserver/src/remote_storage/storage_sync.rs index 19590d16a7..5fc99f8228 100644 --- a/pageserver/src/remote_storage/storage_sync.rs +++ b/pageserver/src/remote_storage/storage_sync.rs @@ -375,7 +375,7 @@ pub(super) fn spawn_storage_sync_thread< Ok(local_path) => Some(local_path), Err(e) => { error!( - "Failed to find local path for remote path {:?}: {:#}", + "Failed to find local path for remote path {:?}: {:?}", remote_path, e ); None @@ -507,7 +507,7 @@ async fn loop_step< Ok(extra_step) => extra_step, Err(e) => { error!( - "Failed to process storage sync task for tenant {}, timeline {}: {:#}", + "Failed to process storage sync task for tenant {}, timeline {}: {:?}", sync_id.0, sync_id.1, e ); None diff --git a/pageserver/src/remote_storage/storage_sync/download.rs b/pageserver/src/remote_storage/storage_sync/download.rs index a2d3f7e4ad..e4f511e92b 100644 --- a/pageserver/src/remote_storage/storage_sync/download.rs +++ b/pageserver/src/remote_storage/storage_sync/download.rs @@ -80,7 +80,7 @@ pub(super) async fn download_timeline< { Ok(remote_timeline) => Cow::Owned(remote_timeline), Err(e) => { - error!("Failed to download full timeline index: {:#}", e); + error!("Failed to download full timeline index: {:?}", e); return match remote_disk_consistent_lsn { Some(disk_consistent_lsn) => { sync_queue::push(SyncTask::new( @@ -112,7 +112,7 @@ pub(super) async fn download_timeline< if let Err(e) = download_missing_branches(conf, remote_assets.as_ref(), sync_id.0).await { error!( - "Failed to download missing branches for sync id {}: {:#}", + "Failed to download missing branches for sync id {}: {:?}", sync_id, e ); sync_queue::push(SyncTask::new( @@ -150,7 +150,7 @@ pub(super) async fn download_timeline< Err(e) => { let archives_left = archives_total - archives_downloaded; error!( - "Failed to download archive {:?} (archives downloaded: {}; archives left: {}) for tenant {} timeline {}, requeueing the download: {:#}", + "Failed to download archive {:?} (archives downloaded: {}; archives left: {}) for tenant {} timeline {}, requeueing the download: {:?}", archive_id, archives_downloaded, archives_left, tenant_id, timeline_id, e ); sync_queue::push(SyncTask::new( @@ -307,7 +307,7 @@ async fn download_missing_branches< while let Some(download_result) = remote_only_branches_downloads.next().await { if let Err(e) = download_result { branch_downloads_failed = true; - error!("Failed to download a branch file: {:#}", e); + error!("Failed to download a branch file: {:?}", e); } } ensure!( diff --git a/pageserver/src/remote_storage/storage_sync/upload.rs b/pageserver/src/remote_storage/storage_sync/upload.rs index a273b05293..89e5bc241b 100644 --- a/pageserver/src/remote_storage/storage_sync/upload.rs +++ b/pageserver/src/remote_storage/storage_sync/upload.rs @@ -43,7 +43,7 @@ pub(super) async fn upload_timeline_checkpoint< debug!("Uploading checkpoint for sync id {}", sync_id); if let Err(e) = upload_missing_branches(config, remote_assets.as_ref(), sync_id.0).await { error!( - "Failed to upload missing branches for sync id {}: {:#}", + "Failed to upload missing branches for sync id {}: {:?}", sync_id, e ); sync_queue::push(SyncTask::new( @@ -69,7 +69,7 @@ pub(super) async fn upload_timeline_checkpoint< match update_index_description(remote_assets.as_ref(), &timeline_dir, sync_id).await { Ok(remote_timeline) => Some(Cow::Owned(remote_timeline)), Err(e) => { - error!("Failed to download full timeline index: {:#}", e); + error!("Failed to download full timeline index: {:?}", e); sync_queue::push(SyncTask::new( sync_id, retries, @@ -132,7 +132,7 @@ pub(super) async fn upload_timeline_checkpoint< } Err(e) => { error!( - "Failed to upload checkpoint: {:#}, requeueing the upload", + "Failed to upload checkpoint: {:?}, requeueing the upload", e ); sync_queue::push(SyncTask::new( @@ -253,7 +253,7 @@ async fn upload_missing_branches< .await .add_branch_file(tenant_id, local_only_branch.clone()), Err(e) => { - error!("Failed to upload branch file: {:#}", e); + error!("Failed to upload branch file: {:?}", e); branch_uploads_failed = true; } } diff --git a/pageserver/src/tenant_mgr.rs b/pageserver/src/tenant_mgr.rs index 42a97cfe84..368e2fdbad 100644 --- a/pageserver/src/tenant_mgr.rs +++ b/pageserver/src/tenant_mgr.rs @@ -79,7 +79,7 @@ pub fn set_timeline_states( }); if let Err(e) = put_timelines_into_tenant(conf, tenant, tenant_id, timeline_states) { error!( - "Failed to update timeline states for tenant {}: {:#}", + "Failed to update timeline states for tenant {}: {:?}", tenant_id, e ); } diff --git a/zenith_utils/src/http/error.rs b/zenith_utils/src/http/error.rs index 7b5e0eb9b0..3262c33a51 100644 --- a/zenith_utils/src/http/error.rs +++ b/zenith_utils/src/http/error.rs @@ -69,7 +69,7 @@ impl HttpErrorBody { } pub async fn handler(err: routerify::RouteError) -> Response { - tracing::error!("{}", err); + tracing::error!("Error processing HTTP request: {:?}", err); err.downcast::() .expect("handler should always return api error") .into_response()