From 6f4aad76040df8b9de185ed324c8c002a32664a0 Mon Sep 17 00:00:00 2001 From: tison Date: Tue, 3 Nov 2026 14:33:15 +0800 Subject: [PATCH 1/2] fix(core): preserve retryable request signing errors --- core/core/src/raw/http_util/error.rs | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/core/core/src/raw/http_util/error.rs b/core/core/src/raw/http_util/error.rs index cefb72b77658..db582d894f94 100644 --- a/core/core/src/raw/http_util/error.rs +++ b/core/core/src/raw/http_util/error.rs @@ -39,11 +39,15 @@ pub fn new_request_credential_error(err: anyhow::Error) -> Error { .set_source(err) } -/// Create a new error happened during signing request. +/// Wrap a signing failure, preserving reqsign's retryability when available. pub fn new_request_sign_error(err: anyhow::Error) -> Error { - Error::new(ErrorKind::Unexpected, "signing http request") - .with_operation("reqsign::Sign") - .set_source(err) + let error = Error::new(ErrorKind::Unexpected, "signing http request"); + #[cfg(feature = "reqsign")] + let error = error.with_temporary( + err.downcast_ref::() + .is_some_and(reqsign_core::Error::is_retryable), + ); + error.with_operation("reqsign::Sign").set_source(err) } /// Add response context to error. @@ -75,3 +79,17 @@ pub fn with_error_response_context(mut err: Error, mut parts: Parts) -> Error { err } + +#[cfg(all(test, feature = "reqsign"))] +mod tests { + use super::*; + + #[test] + fn signing_errors_preserve_retryability() { + let reset = reqsign_core::Error::unexpected("connection reset").set_retryable(true); + assert!(new_request_sign_error(reset.into()).is_temporary()); + + let denied = reqsign_core::Error::permission_denied("access denied"); + assert!(!new_request_sign_error(denied.into()).is_temporary()); + } +} From fae76b7a7bf5b0268609af2a92f3cfd76b1ebb03 Mon Sep 17 00:00:00 2001 From: tison Date: Tue, 3 Nov 2026 14:53:02 +0800 Subject: [PATCH 2/2] test(core): remove the signing error flag mapping test --- core/core/src/raw/http_util/error.rs | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/core/core/src/raw/http_util/error.rs b/core/core/src/raw/http_util/error.rs index db582d894f94..c9f91219be93 100644 --- a/core/core/src/raw/http_util/error.rs +++ b/core/core/src/raw/http_util/error.rs @@ -79,17 +79,3 @@ pub fn with_error_response_context(mut err: Error, mut parts: Parts) -> Error { err } - -#[cfg(all(test, feature = "reqsign"))] -mod tests { - use super::*; - - #[test] - fn signing_errors_preserve_retryability() { - let reset = reqsign_core::Error::unexpected("connection reset").set_retryable(true); - assert!(new_request_sign_error(reset.into()).is_temporary()); - - let denied = reqsign_core::Error::permission_denied("access denied"); - assert!(!new_request_sign_error(denied.into()).is_temporary()); - } -}