This is an automated email from the ASF dual-hosted git repository.
tustvold pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/master by this push:
new 2b373f850c [object_store] fix S3 endpoint and trailing slash result in
invalid requests (#6641)
2b373f850c is described below
commit 2b373f850c5ac3d8ba6a1a0dfb98f5711f5318c8
Author: lambda <[email protected]>
AuthorDate: Tue Oct 29 23:06:08 2024 +0800
[object_store] fix S3 endpoint and trailing slash result in invalid
requests (#6641)
Co-authored-by: Yiwei Wang <[email protected]>
---
object_store/src/aws/builder.rs | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/object_store/src/aws/builder.rs b/object_store/src/aws/builder.rs
index c52c3f8dfb..eb79f5e6dc 100644
--- a/object_store/src/aws/builder.rs
+++ b/object_store/src/aws/builder.rs
@@ -961,7 +961,7 @@ impl AmazonS3Builder {
let virtual_hosted = self.virtual_hosted_style_request.get()?;
let bucket_endpoint = match (&self.endpoint, zonal_endpoint,
virtual_hosted) {
(Some(endpoint), _, true) => endpoint.clone(),
- (Some(endpoint), _, false) => format!("{endpoint}/{bucket}"),
+ (Some(endpoint), _, false) => format!("{}/{}",
endpoint.trim_end_matches("/"), bucket),
(None, Some(endpoint), _) => endpoint,
(None, None, true) =>
format!("https://{bucket}.s3.{region}.amazonaws.com"),
(None, None, false) =>
format!("https://s3.{region}.amazonaws.com/{bucket}"),
@@ -1316,6 +1316,29 @@ mod tests {
assert_eq!(builder.client.config.region, "us-east-1");
}
+ #[test]
+ fn s3_test_bucket_endpoint() {
+ let builder = AmazonS3Builder::new()
+ .with_endpoint("http://some.host:1234")
+ .with_bucket_name("foo")
+ .build()
+ .unwrap();
+ assert_eq!(
+ builder.client.config.bucket_endpoint,
+ "http://some.host:1234/foo"
+ );
+
+ let builder = AmazonS3Builder::new()
+ .with_endpoint("http://some.host:1234/")
+ .with_bucket_name("foo")
+ .build()
+ .unwrap();
+ assert_eq!(
+ builder.client.config.bucket_endpoint,
+ "http://some.host:1234/foo"
+ );
+ }
+
#[test]
fn s3_test_urls() {
let mut builder = AmazonS3Builder::new();