22#include <boost/asio/error.hpp>
23#include <boost/asio/io_context.hpp>
24#include <boost/asio/steady_timer.hpp>
25#include <boost/asio/strand.hpp>
38 std::chrono::steady_clock::duration initialDelay_;
39 std::chrono::steady_clock::duration delay_;
53 std::chrono::steady_clock::duration
72 virtual std::chrono::steady_clock::duration
75using RetryStrategyPtr = std::unique_ptr<RetryStrategy>;
81 RetryStrategyPtr strategy_;
82 boost::asio::steady_timer timer_;
83 size_t attemptNumber_ = 0;
84 std::shared_ptr<std::atomic_bool> canceled_{std::make_shared<std::atomic_bool>(
false)};
93 Retry(RetryStrategyPtr strategy, boost::asio::strand<boost::asio::io_context::executor_type> strand);
106 template <
typename Fn>
111 timer_.expires_after(strategy_->getDelay());
112 strategy_->increaseDelay();
114 [
this, canceled = canceled_, func = std::forward<Fn>(func)](boost::system::error_code
const& ec) {
115 if (ec == boost::asio::error::operation_aborted or *canceled) {
139 std::chrono::steady_clock::duration
153 std::chrono::steady_clock::duration maxDelay_;
165 std::chrono::steady_clock::duration
166 nextDelay()
const override;
179 std::chrono::steady_clock::duration delay,
180 std::chrono::steady_clock::duration maxDelay,
181 boost::asio::strand<boost::asio::io_context::executor_type> strand
A retry strategy that retries while exponentially increasing the delay between attempts.
Definition Retry.hpp:152
ExponentialBackoffStrategy(std::chrono::steady_clock::duration delay, std::chrono::steady_clock::duration maxDelay)
Construct a new Exponential Backoff Strategy object.
Definition Retry.cpp:91
Interface for retry strategies.
Definition Retry.hpp:37
std::chrono::steady_clock::duration getDelay() const
Definition Retry.cpp:38
RetryStrategy(std::chrono::steady_clock::duration delay)
Construct a new Retry Strategy object.
Definition Retry.cpp:33
void reset()
Reset the delay value.
Definition Retry.cpp:50
virtual std::chrono::steady_clock::duration nextDelay() const =0
void increaseDelay()
Increase the delay value.
Definition Retry.cpp:44
A retry mechanism.
Definition Retry.hpp:80
size_t attemptNumber() const
Definition Retry.cpp:73
Retry(RetryStrategyPtr strategy, boost::asio::strand< boost::asio::io_context::executor_type > strand)
Construct a new Retry object.
Definition Retry.cpp:55
std::chrono::steady_clock::duration delayValue() const
Definition Retry.cpp:79
~Retry()
Destroy the Retry object.
Definition Retry.cpp:60
void retry(Fn &&func)
Schedule a retry.
Definition Retry.hpp:108
void reset()
Reset the delay value and attempt number.
Definition Retry.cpp:85
void cancel()
Cancel scheduled retry if any.
Definition Retry.cpp:66
This namespace contains various utilities.
Definition AccountUtils.hpp:30
Retry makeRetryExponentialBackoff(std::chrono::steady_clock::duration delay, std::chrono::steady_clock::duration maxDelay, boost::asio::strand< boost::asio::io_context::executor_type > strand)
Create a retry mechanism with exponential backoff strategy.
Definition Retry.cpp:107