From 346aff6a23f1e3c1d821337ceb6e3aefd702d4b0 Mon Sep 17 00:00:00 2001 From: "Bala.FA" Date: Tue, 16 Jun 2026 21:57:25 +0530 Subject: [PATCH] Update retryable errors and delay The values are synced with `minio-go`. Signed-off-by: Bala.FA --- api/src/main/java/io/minio/BaseS3Client.java | 15 ++++++++++++++- .../io/minio/CompleteMultipartUploadArgs.java | 4 ++-- api/src/main/java/io/minio/ComposeObjectArgs.java | 4 ++-- api/src/main/java/io/minio/Http.java | 2 +- api/src/main/java/io/minio/PutObjectBaseArgs.java | 4 ++-- api/src/main/java/io/minio/RemoveObjectsArgs.java | 4 ++-- 6 files changed, 23 insertions(+), 10 deletions(-) diff --git a/api/src/main/java/io/minio/BaseS3Client.java b/api/src/main/java/io/minio/BaseS3Client.java index 0ef29a5b0..586fe548e 100644 --- a/api/src/main/java/io/minio/BaseS3Client.java +++ b/api/src/main/java/io/minio/BaseS3Client.java @@ -86,8 +86,21 @@ public abstract class BaseS3Client implements AutoCloseable { } } + // Update the list from https://github.com/minio/minio-go/blob/master/retry.go#L98 protected static final Set RETRYABLE_ERRORS = - ImmutableSet.of("InternalError", "RequestTimeout", "ServiceUnavailable", "SlowDown"); + ImmutableSet.of( + "RequestError", + "RequestTimeout", + "Throttling", + "ThrottlingException", + "RequestLimitExceeded", + "RequestThrottled", + "InternalError", + "ExpiredToken", + "ExpiredTokenException", + "SlowDown", + "SlowDownWrite", + "SlowDownRead"); protected static final String NO_SUCH_BUCKET_MESSAGE = "Bucket does not exist"; protected static final String NO_SUCH_BUCKET = "NoSuchBucket"; protected static final String NO_SUCH_BUCKET_POLICY = "NoSuchBucketPolicy"; diff --git a/api/src/main/java/io/minio/CompleteMultipartUploadArgs.java b/api/src/main/java/io/minio/CompleteMultipartUploadArgs.java index 9a6c9ded6..abf6dce31 100644 --- a/api/src/main/java/io/minio/CompleteMultipartUploadArgs.java +++ b/api/src/main/java/io/minio/CompleteMultipartUploadArgs.java @@ -25,7 +25,7 @@ public class CompleteMultipartUploadArgs extends ObjectArgs { private String uploadId; private Part[] parts; private ServerSideEncryption.CustomerKey ssec; - private long delayMs = 100L; + private long delayMs = 200L; private int maxRetries = 5; protected CompleteMultipartUploadArgs() {} @@ -104,7 +104,7 @@ public Builder ssec(ServerSideEncryption.CustomerKey ssec) { return this; } - /** Set delay between retries. Value <= 0 makes no delay (default 100ms). */ + /** Set delay between retries. Value <= 0 makes no delay (default 200ms). */ public Builder delayMs(long delayMs) { operations.add(args -> args.delayMs = delayMs); return this; diff --git a/api/src/main/java/io/minio/ComposeObjectArgs.java b/api/src/main/java/io/minio/ComposeObjectArgs.java index b307180c0..c303ca467 100644 --- a/api/src/main/java/io/minio/ComposeObjectArgs.java +++ b/api/src/main/java/io/minio/ComposeObjectArgs.java @@ -26,7 +26,7 @@ */ public class ComposeObjectArgs extends ObjectWriteArgs { List sources; - private long delayMs = 100L; + private long delayMs = 200L; private int maxRetries = 5; protected ComposeObjectArgs() {} @@ -87,7 +87,7 @@ public Builder sources(List sources) { return this; } - /** Set delay between retries. Value <= 0 makes no delay (default 100ms). */ + /** Set delay between retries. Value <= 0 makes no delay (default 200ms). */ public Builder delayMs(long delayMs) { operations.add(args -> args.delayMs = delayMs); return this; diff --git a/api/src/main/java/io/minio/Http.java b/api/src/main/java/io/minio/Http.java index a61226839..772ba721d 100644 --- a/api/src/main/java/io/minio/Http.java +++ b/api/src/main/java/io/minio/Http.java @@ -753,7 +753,7 @@ public StatusRetryInterceptor( StatusRetryInterceptor interceptor, PrintWriter traceWriter, boolean isBucketRequest) { this( interceptor != null ? interceptor.retryStatusCodes : RETRIABLE_STATUS_CODES, - interceptor != null ? interceptor.delayMs : 100, + interceptor != null ? interceptor.delayMs : 200, interceptor != null ? interceptor.maxRetries : 5, traceWriter, isBucketRequest); diff --git a/api/src/main/java/io/minio/PutObjectBaseArgs.java b/api/src/main/java/io/minio/PutObjectBaseArgs.java index fbf908349..7ad88a780 100644 --- a/api/src/main/java/io/minio/PutObjectBaseArgs.java +++ b/api/src/main/java/io/minio/PutObjectBaseArgs.java @@ -28,7 +28,7 @@ public abstract class PutObjectBaseArgs extends ObjectWriteArgs { protected MediaType contentType; protected Checksum.Algorithm checksum; protected int parallelUploads; - protected long delayMs = 100L; + protected long delayMs = 200L; protected int maxRetries = 5; public Long objectSize() { @@ -149,7 +149,7 @@ public B parallelUploads(int parallelUploads) { return (B) this; } - /** Set delay between retries. Value <= 0 disables retry (default 100ms). */ + /** Set delay between retries. Value <= 0 disables retry (default 200ms). */ public B delayMs(long delayMs) { operations.add(args -> args.delayMs = delayMs); return (B) this; diff --git a/api/src/main/java/io/minio/RemoveObjectsArgs.java b/api/src/main/java/io/minio/RemoveObjectsArgs.java index 3db045a2c..edaae4442 100644 --- a/api/src/main/java/io/minio/RemoveObjectsArgs.java +++ b/api/src/main/java/io/minio/RemoveObjectsArgs.java @@ -24,7 +24,7 @@ public class RemoveObjectsArgs extends BucketArgs { private boolean bypassGovernanceMode; private Iterable objects = new ArrayList<>(); - private long delayMs = 100L; + private long delayMs = 200L; private int maxRetries = 5; public boolean bypassGovernanceMode() { @@ -60,7 +60,7 @@ public Builder objects(Iterable objects) { return this; } - /** Set delay between retries. Value <= 0 makes no delay (default 100ms). */ + /** Set delay between retries. Value <= 0 makes no delay (default 200ms). */ public Builder delayMs(long delayMs) { operations.add(args -> args.delayMs = delayMs); return this;