22#include "data/cassandra/Error.hpp"
23#include "data/cassandra/Types.hpp"
24#include "util/Retry.hpp"
25#include "util/log/Logger.hpp"
27#include <boost/asio.hpp>
28#include <boost/asio/io_context.hpp>
29#include <boost/asio/strand.hpp>
33namespace data::cassandra::impl {
48 : retry_(
util::makeRetryExponentialBackoff(
49 std::chrono::milliseconds(1),
50 std::chrono::seconds(1),
51 boost::asio::make_strand(ioc)
64 auto const delayMs = std::chrono::duration_cast<std::chrono::milliseconds>(retry_.
delayValue()).count();
65 LOG(log_.
error()) <<
"Cassandra write error: " << err <<
", current retries " << retry_.
attemptNumber()
66 <<
", retrying in " << delayMs <<
" milliseconds";
76 template <
typename Fn>
80 retry_.
retry(std::forward<Fn>(fn));
A simple container for both error message and error code.
Definition Error.hpp:34
A retry policy that employs exponential backoff.
Definition RetryPolicy.hpp:38
bool shouldRetry(CassandraError err)
Computes next retry delay and returns true unconditionally.
Definition RetryPolicy.hpp:62
ExponentialBackoffRetryPolicy(boost::asio::io_context &ioc)
Create a new retry policy instance with the io_context provided.
Definition RetryPolicy.hpp:47
void retry(Fn &&fn)
Schedules next retry.
Definition RetryPolicy.hpp:78
A simple thread-safe logger for the channel specified in the constructor.
Definition Logger.hpp:110
Pump error(SourceLocationType const &loc=CURRENT_SRC_LOCATION) const
Interface for logging at Severity::ERR severity.
Definition Logger.cpp:215
A retry mechanism.
Definition Retry.hpp:80
size_t attemptNumber() const
Definition Retry.cpp:73
std::chrono::steady_clock::duration delayValue() const
Definition Retry.cpp:79
void retry(Fn &&func)
Schedule a retry.
Definition Retry.hpp:108
This namespace contains various utilities.
Definition AccountUtils.hpp:30