Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion api/src/main/java/io/minio/BaseS3Client.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> 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";
Expand Down
4 changes: 2 additions & 2 deletions api/src/main/java/io/minio/CompleteMultipartUploadArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -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() {}
Expand Down Expand Up @@ -104,7 +104,7 @@ public Builder ssec(ServerSideEncryption.CustomerKey ssec) {
return this;
}

/** Set delay between retries. Value &lt;= 0 makes no delay (default 100ms). */
/** Set delay between retries. Value &lt;= 0 makes no delay (default 200ms). */
public Builder delayMs(long delayMs) {
operations.add(args -> args.delayMs = delayMs);
return this;
Expand Down
4 changes: 2 additions & 2 deletions api/src/main/java/io/minio/ComposeObjectArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
*/
public class ComposeObjectArgs extends ObjectWriteArgs {
List<SourceObject> sources;
private long delayMs = 100L;
private long delayMs = 200L;
private int maxRetries = 5;

protected ComposeObjectArgs() {}
Expand Down Expand Up @@ -87,7 +87,7 @@ public Builder sources(List<SourceObject> sources) {
return this;
}

/** Set delay between retries. Value &lt;= 0 makes no delay (default 100ms). */
/** Set delay between retries. Value &lt;= 0 makes no delay (default 200ms). */
public Builder delayMs(long delayMs) {
operations.add(args -> args.delayMs = delayMs);
return this;
Expand Down
2 changes: 1 addition & 1 deletion api/src/main/java/io/minio/Http.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
4 changes: 2 additions & 2 deletions api/src/main/java/io/minio/PutObjectBaseArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -149,7 +149,7 @@ public B parallelUploads(int parallelUploads) {
return (B) this;
}

/** Set delay between retries. Value &lt;= 0 disables retry (default 100ms). */
/** Set delay between retries. Value &lt;= 0 disables retry (default 200ms). */

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix delayMs Javadoc behavior wording.

Line 152 says <= 0 disables retry, but delayMs <= 0 only disables backoff delay; retries are controlled by maxRetries.

Suggested fix
-/** Set delay between retries. Value <= 0 disables retry (default 200ms). */
+/** Set delay between retries. Value <= 0 makes no delay (default 200ms). */
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
/** Set delay between retries. Value &lt;= 0 disables retry (default 200ms). */
/** Set delay between retries. Value <= 0 makes no delay (default 200ms). */
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@api/src/main/java/io/minio/PutObjectBaseArgs.java` at line 152, The Javadoc
comment for the delay setting incorrectly states that a value <= 0 disables
retry, but the actual behavior is that delayMs <= 0 only disables the backoff
delay between retries, while the number of retries is controlled by the
maxRetries parameter. Update the Javadoc comment to correctly describe that
delayMs <= 0 disables the delay between retries (not the retries themselves),
and clarify that retry behavior is controlled by the maxRetries parameter
instead.

public B delayMs(long delayMs) {
operations.add(args -> args.delayMs = delayMs);
return (B) this;
Expand Down
4 changes: 2 additions & 2 deletions api/src/main/java/io/minio/RemoveObjectsArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
public class RemoveObjectsArgs extends BucketArgs {
private boolean bypassGovernanceMode;
private Iterable<DeleteRequest.Object> objects = new ArrayList<>();
private long delayMs = 100L;
private long delayMs = 200L;
private int maxRetries = 5;

public boolean bypassGovernanceMode() {
Expand Down Expand Up @@ -60,7 +60,7 @@ public Builder objects(Iterable<DeleteRequest.Object> objects) {
return this;
}

/** Set delay between retries. Value &lt;= 0 makes no delay (default 100ms). */
/** Set delay between retries. Value &lt;= 0 makes no delay (default 200ms). */
public Builder delayMs(long delayMs) {
operations.add(args -> args.delayMs = delayMs);
return this;
Expand Down
Loading