/* * Copyright 2011-2017 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.services.stepfunctions.builder.states; import com.amazonaws.services.stepfunctions.builder.ErrorCodes; import com.amazonaws.services.stepfunctions.builder.internal.Buildable; import com.amazonaws.services.stepfunctions.builder.internal.PropertyNames; import com.fasterxml.jackson.annotation.JsonProperty; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Describes retry behavior for a state. A Retrier consists of a list of error codes that the retrier applies to and parameters * controlling the behavior when a retry is performed. * * @see <a href="https://states-language.net/spec.html#errors">https://states-language.net/spec.html#errors</a> */ public final class Retrier { @JsonProperty(PropertyNames.ERROR_EQUALS) private final List<String> errorEquals; @JsonProperty(PropertyNames.INTERVAL_SECONDS) private final Integer intervalSeconds; @JsonProperty(PropertyNames.MAX_ATTEMPTS) private final Integer maxAttempts; @JsonProperty(PropertyNames.BACKOFF_RATE) private final Double backoffRate; private Retrier(Builder builder) { this.errorEquals = new ArrayList<String>(builder.errorEquals); this.intervalSeconds = builder.intervalSeconds; this.maxAttempts = builder.maxAttempts; this.backoffRate = builder.backoffRate; } /** * @return List of error codes this retrier handles. */ public List<String> getErrorEquals() { return errorEquals; } /** * @return Delay before the first retry attempt. */ public Integer getIntervalSeconds() { return intervalSeconds; } /** * @return Max number of retry attempts this retrier can perform. */ public Integer getMaxAttempts() { return maxAttempts; } /** * @return Multiplier that increases the {@link #getIntervalSeconds()} on each attempt. */ public Double getBackoffRate() { return backoffRate; } /** * @return Builder instance to construct a {@link Retrier}. */ public static Builder builder() { return new Builder(); } /** * Builder for a {@link Retrier}. */ public static final class Builder implements Buildable<Retrier> { @JsonProperty(PropertyNames.ERROR_EQUALS) private List<String> errorEquals = new ArrayList<String>(); @JsonProperty(PropertyNames.INTERVAL_SECONDS) private Integer intervalSeconds; @JsonProperty(PropertyNames.MAX_ATTEMPTS) private Integer maxAttempts; @JsonProperty(PropertyNames.BACKOFF_RATE) private Double backoffRate; private Builder() { } /** * REQUIRED. Adds the codes to the list of error codes that this retrier handles. If the retrier matches an error code * then the state may be retried according to the retry parameters. * * @param errorEquals New error codes to add to this retrier's handled errors. * @return This object for method chaining. */ public Builder errorEquals(String... errorEquals) { Collections.addAll(this.errorEquals, errorEquals); return this; } /** * OPTIONAL. Makes this retrier handle all errors. This method should not be used with {@link #errorEquals}. * * @return This object for method chaining. */ public Builder retryOnAllErrors() { this.errorEquals.clear(); errorEquals(ErrorCodes.ALL); return this; } /** * OPTIONAL. Delay before the first retry attempt. The default value is 1 second. The delay for subsequent retries will * be * computed by applying the {@link #backoffRate} multiplier to the previous delay. * * @param intervalSeconds Delay in seconds. Positive integer. * @return This object for method chaining. */ public Builder intervalSeconds(Integer intervalSeconds) { this.intervalSeconds = intervalSeconds; return this; } /** * OPTIONAL. Max number of retry attempts this retrier can perform. The default value is 3 if not specified. <p>Note that * 0 is a legal value for MaxAttempts and represents that the error should not be retried.</p> * * @param maxAttempts Number of max attempts. Non-negative integer. * @return This object for method chaining. */ public Builder maxAttempts(Integer maxAttempts) { this.maxAttempts = maxAttempts; return this; } /** * OPTIONAL. Multiplier that increases the {@link #intervalSeconds(Integer)} on each attempt. The default value is 2.0. * * @param backoffRate Multiplier for {@link #intervalSeconds(Integer)}. Must be greater than or equal to 1.0. * @return This object for method chaining. */ public Builder backoffRate(Double backoffRate) { this.backoffRate = backoffRate; return this; } /** * @return An immutable {@link Retrier} object. */ @Override public Retrier build() { return new Retrier(this); } } }