com.amazonaws.opensdk.retry.RetryPolicyBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of aws-java-sdk-opensdk Show documentation
Show all versions of aws-java-sdk-opensdk Show documentation
A generic runtime built on the AWS SDK for Java
/*
* Copyright 2011-2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.amazonaws.opensdk.retry;
import com.amazonaws.retry.PredefinedRetryPolicies;
import com.amazonaws.retry.v2.AndRetryCondition;
import com.amazonaws.retry.v2.BackoffStrategy;
import com.amazonaws.retry.v2.FixedDelayBackoffStrategy;
import com.amazonaws.retry.v2.MaxNumberOfRetriesCondition;
import com.amazonaws.retry.v2.OrRetryCondition;
import com.amazonaws.retry.v2.RetryCondition;
import com.amazonaws.retry.v2.RetryOnExceptionsCondition;
import com.amazonaws.retry.v2.RetryOnStatusCodeCondition;
import com.amazonaws.retry.v2.RetryPolicy;
import com.amazonaws.retry.v2.SimpleRetryPolicy;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Fluent builder to construct a {@link RetryPolicy} implementation.
*/
public final class RetryPolicyBuilder {
private final List> exceptions = new ArrayList<>();
private final List statusCodes = new ArrayList<>();
private BackoffStrategy backoffStrategy = PredefinedRetryPolicies.DEFAULT_BACKOFF_STRATEGY_V2;
private int maxNumberOfRetries = PredefinedRetryPolicies.DEFAULT_MAX_ERROR_RETRY;
/**
* @return Builder with standard defaults.
*/
public static RetryPolicyBuilder standard() {
return new RetryPolicyBuilder();
}
private RetryPolicyBuilder() {
}
/**
* @param exceptions Exception classes to retry on.
* @return This object for method chaining.
*/
@SafeVarargs
public final RetryPolicyBuilder retryOnExceptions(Class extends Exception>... exceptions) {
Collections.addAll(this.exceptions, exceptions);
return this;
}
/**
* @param statusCodes HTTP status codes to retry on.
* @return This object for method chaining.
*/
public RetryPolicyBuilder retryOnStatusCodes(int... statusCodes) {
for (int statusCode : statusCodes) {
this.statusCodes.add(statusCode);
}
return this;
}
/**
* The default value for max number of retries is {@value PredefinedRetryPolicies#DEFAULT_MAX_ERROR_RETRY}.
*
* Note that the actual max allowed retries may be less due to retry throttling. See this blog for more details.
*
* @param maxNumberOfRetries Max number of retries to allow.
* @return This object for method chaining.
*/
public RetryPolicyBuilder maxNumberOfRetries(int maxNumberOfRetries) {
this.maxNumberOfRetries = maxNumberOfRetries;
return this;
}
/**
* Note, this option and {@link #backoffStrategy(BackoffStrategy)} are mutually exclusive settings.
*
* If backoff strategy is not provided, {@link PredefinedRetryPolicies#DEFAULT_BACKOFF_STRATEGY} will be used.
*
* See {@link com.amazonaws.retry.PredefinedBackoffStrategies} for precanned implementations.
*
* @param backoff Fixed delay before each retry attempt.
* @return This object for method chaining.
*/
public RetryPolicyBuilder fixedBackoff(int backoff) {
this.backoffStrategy = new FixedDelayBackoffStrategy(backoff);
return this;
}
/**
* Note, this option and {@link #fixedBackoff(int)} are mutually exclusive settings.
*
* If backoff strategy is not provided, {@link PredefinedRetryPolicies#DEFAULT_BACKOFF_STRATEGY} will be used.
*
* See {@link com.amazonaws.retry.PredefinedBackoffStrategies} for precanned implementations.
*
* @param backoffStrategy Backoff strategy to use in the RetryPolicy.
* @return This object for method chaining.
*/
public RetryPolicyBuilder backoffStrategy(BackoffStrategy backoffStrategy) {
this.backoffStrategy = backoffStrategy;
return this;
}
/**
* Construct a RetryPolicy with the current configuration in the builder.
*
* @return Configured RetryPolicy object.
*/
public RetryPolicy build() {
return new SimpleRetryPolicy(buildCondition(), backoffStrategy);
}
private RetryCondition buildCondition() {
return new AndRetryCondition(new MaxNumberOfRetriesCondition(maxNumberOfRetries),
new OrRetryCondition(
new RetryOnExceptionsCondition(exceptions),
new RetryOnStatusCodeCondition(statusCodes)));
}
}