1/*
2 * Copyright 2010-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License").
5 * You may not use this file except in compliance with the License.
6 * A copy of the License is located at
7 *
8 * http://aws.amazon.com/apache2.0
9 *
10 * or in the "license" file accompanying this file. This file is distributed
11 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12 * express or implied. See the License for the specific language governing
13 * permissions and limitations under the License.
14 */
15
16#pragma once
17
18#include <aws/core/Core_EXPORTS.h>
19
20namespace Aws
21{
22 namespace Client
23 {
24
25 enum class CoreErrors;
26 template<typename ERROR_TYPE>
27 class AWSError;
28
29 /**
30 * Interface for defining a Retry Strategy. Override this class to provide your own custom retry behavior.
31 */
32 class AWS_CORE_API RetryStrategy
33 {
34 public:
35 virtual ~RetryStrategy() = default;
36 /**
37 * Returns true if the error can be retried given the error and the number of times already tried.
38 */
39 virtual bool ShouldRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const = 0;
40
41 /**
42 * Calculates the time in milliseconds the client should sleep before attemptinig another request based on the error and attemptedRetries count.
43 */
44 virtual long CalculateDelayBeforeNextRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const = 0;
45
46 };
47
48 } // namespace Client
49} // namespace Aws
50