This is an automated email from the ASF dual-hosted git repository.
crepererum pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-rs-object-store.git
The following commit(s) were added to refs/heads/main by this push:
new 1a0d21e fix(aws): populate default header for complete mutipart
request (#688)
1a0d21e is described below
commit 1a0d21edbfd54153c11500c3c81b27c86db5ce5f
Author: dentiny <[email protected]>
AuthorDate: Wed May 6 07:05:40 2026 -0700
fix(aws): populate default header for complete mutipart request (#688)
---
src/aws/client.rs | 40 +++++++++++++++++++++++++++++++++++++---
1 file changed, 37 insertions(+), 3 deletions(-)
diff --git a/src/aws/client.rs b/src/aws/client.rs
index ed6e8c4..cd2f7bb 100644
--- a/src/aws/client.rs
+++ b/src/aws/client.rs
@@ -784,9 +784,12 @@ impl S3Client {
let credential = self.config.get_session_credential().await?;
let url = self.config.path_url(location);
- let request = self
- .client
- .post(url)
+ let mut builder = self.client.post(url);
+ if let Some(headers) =
self.config.client_options.get_default_headers() {
+ builder = builder.headers(headers.clone());
+ }
+
+ let request = builder
.query(&[("uploadId", upload_id)])
.body(body)
.with_aws_sigv4(credential.authorizer(), None);
@@ -1137,4 +1140,35 @@ mod tests {
assert!(result.is_ok());
mock.shutdown().await;
}
+
+ #[tokio::test]
+ async fn test_default_headers_signed_complete_multipart() {
+ let mock = MockServer::new().await;
+ mock.push_fn(|req| {
+ assert_default_headers_signed(&req);
+ assert!(req.uri().query().unwrap_or("").contains("uploadId"));
+
+ Response::builder()
+ .status(200)
+
.body("<CompleteMultipartUploadResult><ETag>\"test-etag\"</ETag></CompleteMultipartUploadResult>".to_string())
+ .unwrap()
+ });
+
+ let config = default_headers_config(&mock);
+ let client = S3Client::new(config,
HttpClient::new(reqwest::Client::new()));
+
+ let parts = vec![PartId {
+ content_id: "\"part-etag\"".to_string(),
+ }];
+ let _ = client
+ .complete_multipart(
+ &Path::from("test"),
+ "test-upload-id",
+ parts,
+ CompleteMultipartMode::Overwrite,
+ )
+ .await
+ .unwrap();
+ mock.shutdown().await;
+ }
}