This is an automated email from the ASF dual-hosted git repository.

snazy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git


The following commit(s) were added to refs/heads/main by this push:
     new 2e4afa8db Minio testcontainer: allow setting a specific region (#2664)
2e4afa8db is described below

commit 2e4afa8db6fa5cf8a6474f259c958c8643b44823
Author: Robert Stupp <[email protected]>
AuthorDate: Wed Sep 24 18:20:49 2025 +0200

    Minio testcontainer: allow setting a specific region (#2664)
    
    ... to remove the need to derive it via the AWS-SDK default mechanism 
requiring a system property or environment variable.
---
 .../java/org/apache/polaris/test/minio/Minio.java  |  3 +++
 .../org/apache/polaris/test/minio/MinioAccess.java |  3 +++
 .../apache/polaris/test/minio/MinioContainer.java  | 24 +++++++++++++---------
 .../apache/polaris/test/minio/MinioExtension.java  |  3 ++-
 4 files changed, 22 insertions(+), 11 deletions(-)

diff --git 
a/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/Minio.java
 
b/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/Minio.java
index be8b10eb7..f5ad582ad 100644
--- 
a/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/Minio.java
+++ 
b/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/Minio.java
@@ -39,5 +39,8 @@ public @interface Minio {
   /** Optional, use this bucket instead of a random one. */
   String bucket() default DEFAULT;
 
+  /** Optional, use this region. */
+  String region() default DEFAULT;
+
   String DEFAULT = "minio_default_value__";
 }
diff --git 
a/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/MinioAccess.java
 
b/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/MinioAccess.java
index 44f5649c1..86e0a68f4 100644
--- 
a/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/MinioAccess.java
+++ 
b/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/MinioAccess.java
@@ -21,6 +21,7 @@ package org.apache.polaris.test.minio;
 
 import java.net.URI;
 import java.util.Map;
+import java.util.Optional;
 import software.amazon.awssdk.core.sync.RequestBody;
 import software.amazon.awssdk.services.s3.S3Client;
 
@@ -43,6 +44,8 @@ public interface MinioAccess {
 
   String bucket();
 
+  Optional<String> region();
+
   /** HTTP protocol endpoint. */
   String s3endpoint();
 
diff --git 
a/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/MinioContainer.java
 
b/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/MinioContainer.java
index 9c8ee210b..6d49de0bf 100644
--- 
a/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/MinioContainer.java
+++ 
b/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/MinioContainer.java
@@ -27,6 +27,7 @@ import java.time.Duration;
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Optional;
 import org.apache.polaris.containerspec.ContainerSpecHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -122,15 +123,16 @@ public final class MinioContainer extends 
GenericContainer<MinioContainer>
   private String hostPort;
   private String s3endpoint;
   private S3Client s3;
-  private String region;
+  private Optional<String> region;
 
   @SuppressWarnings("unused")
   public MinioContainer() {
-    this(null, null, null, null);
+    this(null, null, null, null, null);
   }
 
   @SuppressWarnings("resource")
-  public MinioContainer(String image, String accessKey, String secretKey, 
String bucket) {
+  public MinioContainer(
+      String image, String accessKey, String secretKey, String bucket, String 
region) {
     super(
         ContainerSpecHelper.containerSpecHelper("minio", MinioContainer.class)
             .dockerImageName(image));
@@ -143,6 +145,7 @@ public final class MinioContainer extends 
GenericContainer<MinioContainer>
         bucket != null
             ? validateBucketHost(bucket)
             : (FIXED_BUCKET_NAME != null ? FIXED_BUCKET_NAME : 
randomString("bucket"));
+    this.region = Optional.ofNullable(region);
     withEnv(MINIO_ACCESS_KEY, this.accessKey);
     withEnv(MINIO_SECRET_KEY, this.secretKey);
     // S3 SDK encodes bucket names in host names - need to tell Minio which 
domain to use
@@ -156,7 +159,7 @@ public final class MinioContainer extends 
GenericContainer<MinioContainer>
   }
 
   public MinioContainer withRegion(String region) {
-    this.region = region;
+    this.region = Optional.of(region);
     return this;
   }
 
@@ -185,6 +188,11 @@ public final class MinioContainer extends 
GenericContainer<MinioContainer>
     return bucket;
   }
 
+  @Override
+  public Optional<String> region() {
+    return region;
+  }
+
   @Override
   public String s3endpoint() {
     Preconditions.checkState(s3endpoint != null, "Container not yet started");
@@ -204,6 +212,7 @@ public final class MinioContainer extends 
GenericContainer<MinioContainer>
     props.put("s3.secret-access-key", secretKey());
     props.put("s3.endpoint", s3endpoint());
     props.put("http-client.type", "urlconnection");
+    region().ifPresent(r -> props.put("client.region", r));
     return props;
   }
 
@@ -259,12 +268,7 @@ public final class MinioContainer extends 
GenericContainer<MinioContainer>
     return S3Client.builder()
         .httpClientBuilder(UrlConnectionHttpClient.builder())
         .applyMutation(builder -> 
builder.endpointOverride(URI.create(s3endpoint())))
-        .applyMutation(
-            builder -> {
-              if (region != null) {
-                builder.region(Region.of(region));
-              }
-            })
+        .applyMutation(builder -> region.ifPresent(r -> 
builder.region(Region.of(r))))
         // .serviceConfiguration(s3Configuration(s3PathStyleAccess, 
s3UseArnRegionEnabled))
         // credentialsProvider(s3AccessKeyId, s3SecretAccessKey, 
s3SessionToken)
         .credentialsProvider(
diff --git 
a/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/MinioExtension.java
 
b/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/MinioExtension.java
index f1cdb7fb5..3a6bcd51c 100644
--- 
a/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/MinioExtension.java
+++ 
b/tools/minio-testcontainer/src/main/java/org/apache/polaris/test/minio/MinioExtension.java
@@ -128,8 +128,9 @@ public class MinioExtension
     String accessKey = nonDefault(minio.accessKey());
     String secretKey = nonDefault(minio.secretKey());
     String bucket = nonDefault(minio.bucket());
+    String region = nonDefault(minio.region());
     MinioContainer container =
-        new MinioContainer(null, accessKey, secretKey, 
bucket).withStartupAttempts(5);
+        new MinioContainer(null, accessKey, secretKey, bucket, 
region).withStartupAttempts(5);
     container.start();
     return container;
   }

Reply via email to