AWS SDK for C++

AWS SDK for C++ Version 1.11.838

Loading...
Searching...
No Matches
RetryStrategy.h
1
6#pragma once
7
8#include <aws/core/Core_EXPORTS.h>
9#include <aws/core/utils/memory/AWSMemory.h>
10#include <aws/core/utils/threading/ReaderWriterLock.h>
11#include <memory>
12
13namespace Aws
14{
15 namespace Http
16 {
17 class HttpResponse;
18 }
19
20 namespace Utils
21 {
22 template<typename R, typename E>
23 class Outcome;
24 }
25
26 namespace Client
27 {
28 static const int NO_RETRY_INCREMENT = 1;
29
30 enum class CoreErrors;
31 template<typename ERROR_TYPE>
32 class AWSError;
33
35
39 class AWS_CORE_API RetryStrategy
40 {
41 public:
42 virtual ~RetryStrategy() = default;
46 virtual bool ShouldRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const = 0;
47
51 virtual long CalculateDelayBeforeNextRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const = 0;
52
57 virtual long GetMaxAttempts() const { return 0; }
58
62 virtual void GetSendToken() {}
63
67 virtual bool HasSendToken()
68 {
69 GetSendToken(); // first call old method for backward compatibility
70 return true;
71 }
72
76 virtual void RequestBookkeeping(const HttpResponseOutcome& /* httpResponseOutcome */) {}
77 virtual void RequestBookkeeping(const HttpResponseOutcome& /* httpResponseOutcome */, const AWSError<CoreErrors>& /* lastError */) {}
78
82 virtual const char* GetStrategyName() const
83 {
84 // SDK provided strategies will provide actual name
85 return "custom";
86 }
87 };
88
95 class AWS_CORE_API RetryQuotaContainer
96 {
97 public:
98 virtual ~RetryQuotaContainer() = default;
99 virtual bool AcquireRetryQuota(int capacityAmount) = 0;
100 virtual bool AcquireRetryQuota(const AWSError<CoreErrors>& error) = 0;
101 virtual void ReleaseRetryQuota(int capacityAmount) = 0;
102 virtual void ReleaseRetryQuota(const AWSError<CoreErrors>& lastError) = 0;
103 virtual int GetRetryQuota() const = 0;
104 };
105
107 {
108 public:
110 virtual ~DefaultRetryQuotaContainer() = default;
111 virtual bool AcquireRetryQuota(int capacityAmount) override;
112 virtual bool AcquireRetryQuota(const AWSError<CoreErrors>& error) override;
113 virtual void ReleaseRetryQuota(int capacityAmount) override;
114 virtual void ReleaseRetryQuota(const AWSError<CoreErrors>& lastError) override;
115 virtual int GetRetryQuota() const override { return m_retryQuota; }
116
117 protected:
120 };
121
122 class AWS_CORE_API StandardRetryStrategy : public RetryStrategy
123 {
124 public:
125 StandardRetryStrategy(long maxAttempts = 3);
126 StandardRetryStrategy(std::shared_ptr<RetryQuotaContainer> retryQuotaContainer, long maxAttempts = 3);
127 StandardRetryStrategy(long maxAttempts, double transientBackoffBaseSec);
129
130 virtual void RequestBookkeeping(const HttpResponseOutcome& httpResponseOutcome) override;
131 virtual void RequestBookkeeping(const HttpResponseOutcome& httpResponseOutcome, const AWSError<CoreErrors>& lastError) override;
132
133 virtual bool ShouldRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const override;
134
135 virtual long CalculateDelayBeforeNextRetry(const AWSError<CoreErrors>& error, long attemptedRetries) const override;
136
137 virtual long GetMaxAttempts() const override { return m_maxAttempts; }
138
139 const char* GetStrategyName() const override { return "standard";}
140
141 class RetryImpl;
142
143 protected:
144 std::shared_ptr<RetryQuotaContainer> m_retryQuotaContainer;
146
147 private:
149 };
150 } // namespace Client
151} // namespace Aws
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 > &)
virtual bool ShouldRetry(const AWSError< CoreErrors > &error, long attemptedRetries) const =0
virtual long CalculateDelayBeforeNextRetry(const AWSError< CoreErrors > &error, long attemptedRetries) const =0
virtual long GetMaxAttempts() const
virtual const char * GetStrategyName() const
virtual void RequestBookkeeping(const HttpResponseOutcome &)
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
const char * GetStrategyName() const override
StandardRetryStrategy(std::shared_ptr< RetryQuotaContainer > retryQuotaContainer, long maxAttempts=3)
StandardRetryStrategy(long maxAttempts, double transientBackoffBaseSec)
StandardRetryStrategy(long maxAttempts=3)
virtual long GetMaxAttempts() const override
static const int NO_RETRY_INCREMENT
Utils::Outcome< std::shared_ptr< Aws::Http::HttpResponse >, AWSError< CoreErrors > > HttpResponseOutcome
Definition AWSClient.h:72
std::unique_ptr< T, D > UniquePtr
Definition AWSMemory.h:255