| 
    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