1
15
16 package software.amazon.awssdk.core.retry.conditions;
17
18 import software.amazon.awssdk.annotations.SdkPublicApi;
19 import software.amazon.awssdk.core.internal.retry.SdkDefaultRetrySetting;
20 import software.amazon.awssdk.core.retry.RetryMode;
21 import software.amazon.awssdk.core.retry.RetryPolicyContext;
22 import software.amazon.awssdk.utils.ToString;
23 import software.amazon.awssdk.utils.Validate;
24
25
28 @SdkPublicApi
29 public final class MaxNumberOfRetriesCondition implements RetryCondition {
30
31 private final int maxNumberOfRetries;
32
33 private MaxNumberOfRetriesCondition(int maxNumberOfRetries) {
34 this.maxNumberOfRetries = Validate.isNotNegative(maxNumberOfRetries, "maxNumberOfRetries");
35 }
36
37 public static MaxNumberOfRetriesCondition create(int maxNumberOfRetries) {
38 return new MaxNumberOfRetriesCondition(maxNumberOfRetries);
39 }
40
41 public static MaxNumberOfRetriesCondition forRetryMode(RetryMode retryMode) {
42 return create(SdkDefaultRetrySetting.maxAttempts(retryMode));
43 }
44
45 @Override
46 public boolean shouldRetry(RetryPolicyContext context) {
47 return context.retriesAttempted() < maxNumberOfRetries;
48 }
49
50 @Override
51 public boolean equals(Object o) {
52 if (this == o) {
53 return true;
54 }
55 if (o == null || getClass() != o.getClass()) {
56 return false;
57 }
58
59 MaxNumberOfRetriesCondition that = (MaxNumberOfRetriesCondition) o;
60
61 return maxNumberOfRetries == that.maxNumberOfRetries;
62 }
63
64 @Override
65 public int hashCode() {
66 return maxNumberOfRetries;
67 }
68
69 @Override
70 public String toString() {
71 return ToString.builder("MaxNumberOfRetriesCondition")
72 .add("maxNumberOfRetries", maxNumberOfRetries)
73 .build();
74 }
75 }
76