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;
+    }
 }

Reply via email to