AWS SDK for C++
AWS SDK for C++
Loading...
Searching...
No Matches
RetryStrategy.h
Go to the documentation of this file.
1
6#pragma once
7
10#include <memory>
11
12namespace Aws
13{
14 namespace Http
15 {
16 class HttpResponse;
17 }
18
19 namespace Utils
20 {
21 template<typename R, typename E>
22 class Outcome;
23 }
24
25 namespace Client
26 {
27 static const int NO_RETRY_INCREMENT = 1;
28
29 enum class CoreErrors;
30 template<typename ERROR_TYPE>
31 class AWSError;
32
34
39 {
40 public:
41 virtual ~RetryStrategy() = default;
45 virtual bool ShouldRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const = 0;
46
50 virtual long CalculateDelayBeforeNextRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const = 0;
51
56 virtual long GetMaxAttempts() const { return 0; }
57
61 virtual void GetSendToken() {}
62
66 virtual bool HasSendToken()
67 {
68 GetSendToken(); // first call old method for backward compatibility
69 return true;
70 }
71
75 virtual void RequestBookkeeping(const HttpResponseOutcome& /* httpResponseOutcome */) {}
76 virtual void RequestBookkeeping(const HttpResponseOutcome& /* httpResponseOutcome */, const AWSError<CoreErrors>& /* lastError */) {}
77 };
78
86 {
87 public:
88 virtual ~RetryQuotaContainer() = default;
89 virtual bool AcquireRetryQuota(int capacityAmount) = 0;
90 virtual bool AcquireRetryQuota(const AWSError<CoreErrors>& error) = 0;
91 virtual void ReleaseRetryQuota(int capacityAmount) = 0;
92 virtual void ReleaseRetryQuota(const AWSError<CoreErrors>& lastError) = 0;
93 virtual int GetRetryQuota() const = 0;
94 };
95
97 {
98 public:
100 virtual ~DefaultRetryQuotaContainer() = default;
101 virtual bool AcquireRetryQuota(int capacityAmount) override;
102 virtual bool AcquireRetryQuota(const AWSError<CoreErrors>& error) override;
103 virtual void ReleaseRetryQuota(int capacityAmount) override;
104 virtual void ReleaseRetryQuota(const AWSError<CoreErrors>& lastError) override;
105 virtual int GetRetryQuota() const override { return m_retryQuota; }
106
107 protected:
110 };
111
113 {
114 public:
115 StandardRetryStrategy(long maxAttempts = 3);
116 StandardRetryStrategy(std::shared_ptr<RetryQuotaContainer> retryQuotaContainer, long maxAttempts = 3);
117
118 virtual void RequestBookkeeping(const HttpResponseOutcome& httpResponseOutcome) override;
119 virtual void RequestBookkeeping(const HttpResponseOutcome& httpResponseOutcome, const AWSError<CoreErrors>& lastError) override;
120
121 virtual bool ShouldRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const override;
122
123 virtual long CalculateDelayBeforeNextRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const override;
124
125 virtual long GetMaxAttempts() const override { return m_maxAttempts; }
126
127 protected:
128 std::shared_ptr<RetryQuotaContainer> m_retryQuotaContainer;
130 };
131 } // namespace Client
132} // namespace Aws
#define AWS_CORE_API
Definition: Core_EXPORTS.h:26
virtual bool AcquireRetryQuota(const AWSError< CoreErrors > &error) override
virtual void ReleaseRetryQuota(int capacityAmount) override
Aws::Utils::Threading::ReaderWriterLock m_retryQuotaLock
virtual bool AcquireRetryQuota(int capacityAmount) override
virtual void ReleaseRetryQuota(const AWSError< CoreErrors > &lastError) override
virtual int GetRetryQuota() const override
virtual void ReleaseRetryQuota(int capacityAmount)=0
virtual bool AcquireRetryQuota(const AWSError< CoreErrors > &error)=0
virtual bool AcquireRetryQuota(int capacityAmount)=0
virtual int GetRetryQuota() const =0
virtual ~RetryQuotaContainer()=default
virtual void ReleaseRetryQuota(const AWSError< CoreErrors > &lastError)=0
virtual ~RetryStrategy()=default
virtual void RequestBookkeeping(const HttpResponseOutcome &, const AWSError< CoreErrors > &)
Definition: RetryStrategy.h:76
virtual bool ShouldRetry(const AWSError< CoreErrors > &error, long attemptedRetries) const =0
virtual bool HasSendToken()
Definition: RetryStrategy.h:66
virtual long CalculateDelayBeforeNextRetry(const AWSError< CoreErrors > &error, long attemptedRetries) const =0
virtual void GetSendToken()
Definition: RetryStrategy.h:61
virtual long GetMaxAttempts() const
Definition: RetryStrategy.h:56
virtual void RequestBookkeeping(const HttpResponseOutcome &)
Definition: RetryStrategy.h:75
std::shared_ptr< RetryQuotaContainer > m_retryQuotaContainer
virtual void RequestBookkeeping(const HttpResponseOutcome &httpResponseOutcome) override
virtual void RequestBookkeeping(const HttpResponseOutcome &httpResponseOutcome, const AWSError< CoreErrors > &lastError) override
virtual bool ShouldRetry(const AWSError< CoreErrors > &error, long attemptedRetries) const override
virtual long CalculateDelayBeforeNextRetry(const AWSError< CoreErrors > &error, long attemptedRetries) const override
StandardRetryStrategy(std::shared_ptr< RetryQuotaContainer > retryQuotaContainer, long maxAttempts=3)
StandardRetryStrategy(long maxAttempts=3)
virtual long GetMaxAttempts() const override
static const int NO_RETRY_INCREMENT
Definition: RetryStrategy.h:27
Utils::Outcome< std::shared_ptr< Aws::Http::HttpResponse >, AWSError< CoreErrors > > HttpResponseOutcome
Definition: AWSClient.h:70