OZO 「お象」
Boost.Asio and libpq based asynchronous PostgreSQL unofficial header-only C++17 client library.
|
|
3 #include <ozo/failover/strategy.h>
4 #include <ozo/core/options.h>
12 namespace ozo::failover {
16 template <
typename TimeConstra
int,
typename Now = decltype(time_traits::now)>
17 inline auto get_try_time_constraint(TimeConstraint t,
int n_tries, [[maybe_unused]] Now now =
time_traits::now) {
18 if constexpr (t ==
none) {
20 }
else if constexpr (std::is_same_v<TimeConstraint, time_traits::time_point>) {
27 template <
typename ...ErrorConditions>
28 constexpr
auto make_errcs_tuple(ErrorConditions ...errcs) {
29 return hana::make_tuple(errcs...);
42 class close_connection_tag;
62 template <
typename Options,
typename Context>
76 : ctx_(std::move(ctx)), options_(std::move(options)) {
77 static_assert(decltype(hana::is_a<hana::map_tag>(options))::
value,
"Options should be boost::hana::map");
84 constexpr
const Options& options()
const {
return options_;}
85 constexpr Options& options() {
return options_;}
95 hana::make_tuple(
ozo::unwrap(ctx_).provider, time_constraint()),
112 template <
typename Connection>
116 std::optional<basic_try> retval;
117 adjust_tries_remain();
120 retval.emplace(
basic_try{std::move(options_), std::move(ctx_)});
143 auto time_constraint()
const {
148 void adjust_tries_remain() {
152 bool can_retry([[maybe_unused]]
error_code ec)
const {
157 if constexpr (decltype(hana::is_empty(
get_conditions()))::value) {
163 constexpr
static const auto no_conditions_ = hana::make_tuple();
175 template <
typename Options = decltype(hana::make_map())>
182 template <
typename OtherOptions>
183 constexpr
static auto rebind_options(OtherOptions&&
options) {
194 static_assert(decltype(hana::is_a<hana::map_tag>(
options))::
value,
"Options should be boost::hana::map");
208 typename TimeConstraint,
typename ...Args>
212 static_assert(decltype(this->
has(
op::tries))::
value,
"number of tries should be specified");
217 std::forward<ConnectionProvider>(provider),
219 std::forward<Args>(args)...
256 constexpr decltype(
auto)
tries(
int n) && {
return std::move(*this).set(
op::tries, n);}
278 constexpr decltype(
auto) operator * (
int n) const & {
return tries(n); }
279 constexpr decltype(
auto) operator * (
int n) && {
return std::move(*this).tries(n); }
282 template <
typename ...Ts>
283 constexpr decltype(
auto) operator * (
int n, const retry_strategy<Ts...>& rs) {
return rs * n;}
284 template <
typename ...Ts>
285 constexpr decltype(
auto) operator * (
int n, retry_strategy<Ts...>&& rs) {
return std::move(rs) * n;}
307 template <
typename ...ErrorConditions>
308 constexpr
auto retry(ErrorConditions ...ec) {
309 if constexpr (
sizeof...(ec) != 0) {
320 template <
typename ...Ts,
typename Op>
321 struct construct_initiator_impl<failover::retry_strategy<Ts...>, Op>
322 : failover::construct_initiator_impl {};
auto get_first_try(const Operation &, const Allocator &, ConnectionProvider &&provider, TimeConstraint t, Args &&...args) const
Get the first try object.
Definition: retry.h:209
constexpr decltype(auto) unwrap(T &&v) noexcept(noexcept(unwrap_impl< std::decay_t< T >>::apply(std::forward< T >(v))))
Unwraps argument underlying value or forwards the argument.
Definition: unwrap.h:57
boost::system::error_code error_code
Error code representation of the library.
Definition: error.h:38
Basic operation context.
Definition: strategy.h:150
constexpr time_traits::time_point deadline(time_traits::time_point t) noexcept
Dealdine calculation.
Definition: deadline.h:16
constexpr decltype(auto) tries(int n) const &
Specify number of tries.
Definition: retry.h:255
static time_point now() noexcept(noexcept(std::chrono::steady_clock::now()))
Definition: time_traits.h:20
constexpr static option< close_connection_tag > close_connection
Set close connection policy on retry, possible values true(default), false.
Definition: retry.h:47
Options for retry.
Definition: retry.h:40
constexpr auto get_conditions() const
Retry error conditions of the strategy.
Definition: retry.h:270
auto defer_close_connection(Connection *conn)
Close connection to the database when leaving the scope.
Definition: connection.h:891
Connection provider concept
constexpr auto none
None object.
Definition: none.h:27
constexpr decltype(auto) get(ozo::option< Key > op) const
Definition: options.h:243
constexpr static option< tries_tag > tries
Set number of tries, see ozo::retry_strategy::tries() for more information.
Definition: retry.h:48
constexpr int get_tries() const
Number of maximum tries count are setted with ozo::retry_strategy::tries()
Definition: retry.h:263
constexpr auto retry(ErrorConditions ...ec)
Definition: retry.h:308
constexpr static option< on_retry_tag > on_retry
Set handler for retry event, may be useful for logging.
Definition: retry.h:46
Database request result value proxy.
Definition: result.h:25
constexpr retry_strategy(Options options=Options{})
Construct a new retry strategy object.
Definition: retry.h:193
constexpr basic_try(Options options, Context ctx)
Construct a new basic try object.
Definition: retry.h:75
constexpr static option< conditions_tag > conditions
Set error conditions to retry.
Definition: retry.h:49
std::optional< basic_try > get_next_try(ozo::error_code ec, Connection &&conn)
Get the next try.
Definition: retry.h:113
auto get_context() const
Get the operation context.
Definition: retry.h:93
Operation try representation.
Definition: retry.h:63
constexpr decltype(auto) get_conditions() const
Retry conditions for the try.
Definition: retry.h:139
Base class for options factories.
Definition: options.h:121
std::chrono::steady_clock::duration duration
Time duration type of the library.
Definition: time_traits.h:13
constexpr decltype(auto) get_option(Map &&map, ozo::option< Key > op)
Get the option object from Hana.Map.
Definition: options.h:52
constexpr time_traits::duration time_left(time_traits::time_point t, time_traits::time_point now) noexcept
Time left to deadline.
Definition: deadline.h:77
constexpr int tries_remain() const
Number of tries remains.
Definition: retry.h:131
Database connection concept.
Retry strategy.
Definition: retry.h:176
constexpr const decltype(hana::make_map()) & options() const &
Definition: options.h:250
constexpr decltype(auto) set(decltype(hana::make_map()) &&...options) &&
constexpr auto has(ozo::option< Key > op) const
Definition: options.h:232