26#ifndef ROUTER_SRC_MYSQL_REST_SERVICE_SRC_MRS_AUTHENTICATION_HELPER_RATE_CONTROL_FOR_H_
27#define ROUTER_SRC_MYSQL_REST_SERVICE_SRC_MRS_AUTHENTICATION_HELPER_RATE_CONTROL_FOR_H_
35namespace authentication {
47template <
typename ControlType, u
int64_t measure_time_in_seconds = 60>
50 using clock = std::chrono::steady_clock;
70 std::optional<milliseconds> minimum_time_between_requests)
112 std::make_pair(ct,
ControlEntry{1, clock::now(), {}, clock::now()}));
120 entry.access_time = clock::now();
137 auto time_between_requests = (clock::now() -
entry.access_time);
154 if (
entry.blocked_at) {
156 entry.reset_blocking();
163 block_for_ - std::chrono::duration_cast<milliseconds>(
164 clock::now() -
entry.blocked_at.value());
171 seconds(measure_time_in_seconds)) {
172 entry.reset_blocking();
177 entry.blocked_at = clock::now();
194 return std::chrono::duration_cast<milliseconds>(clock::now() -
value);
Definition: rate_control_for.h:48
bool allow_check_blocked(ControlEntry &entry, AcceptInfo *info)
Definition: rate_control_for.h:151
std::chrono::steady_clock clock
Definition: rate_control_for.h:50
bool allow_impl(ControlEntry &entry, AcceptInfo *info)
Definition: rate_control_for.h:128
std::chrono::seconds seconds
Definition: rate_control_for.h:53
static milliseconds duration_now(const std::optional< time_point > &value)
Definition: rate_control_for.h:188
std::optional< uint64_t > block_after_
Definition: rate_control_for.h:200
milliseconds block_for_
Definition: rate_control_for.h:199
clock::time_point time_point
Definition: rate_control_for.h:51
std::mutex entries_mutex_
Definition: rate_control_for.h:197
bool allow(const ControlType &ct, AcceptInfo *info=nullptr)
Definition: rate_control_for.h:105
std::chrono::milliseconds milliseconds
Definition: rate_control_for.h:52
static milliseconds duration_now(const time_point &value)
Definition: rate_control_for.h:193
RateControlFor & operator=(const RateControlFor &other)
Definition: rate_control_for.h:77
bool allow_check_too_fast(ControlEntry &entry, AcceptInfo *info)
Definition: rate_control_for.h:134
void clear()
Definition: rate_control_for.h:86
RateControlFor()
Definition: rate_control_for.h:75
size_t size() const
Definition: rate_control_for.h:125
std::optional< milliseconds > minimum_time_between_requests_
Definition: rate_control_for.h:201
std::map< ControlType, ControlEntry > entries_
Definition: rate_control_for.h:198
RateControlFor(std::optional< uint64_t > block_after_rate, seconds block_for, std::optional< milliseconds > minimum_time_between_requests)
Definition: rate_control_for.h:69
Provides atomic access in shared-exclusive modes.
Definition: shared_spin_lock.h:79
std::chrono::seconds seconds
Definition: authorize_manager.cc:69
BlockReason
Definition: rate_control_for.h:37
std::chrono::milliseconds milliseconds
Definition: authorize_manager.cc:68
ValueType value(const std::optional< ValueType > &v)
Definition: gtid.h:83
Definition: authorize_manager.h:48
Definition: gcs_xcom_synode.h:64
struct result result
Definition: result.h:34
Definition: completion_hash.h:35
Definition: rate_control_for.h:39
milliseconds next_request_allowed_after
Definition: rate_control_for.h:44
BlockReason reason
Definition: rate_control_for.h:43
std::chrono::milliseconds milliseconds
Definition: rate_control_for.h:41
Definition: rate_control_for.h:55
std::optional< time_point > blocked_at
Definition: rate_control_for.h:58
time_point access_time
Definition: rate_control_for.h:59
void reset_blocking()
Definition: rate_control_for.h:61
time_point started_counting
Definition: rate_control_for.h:57
uint64_t number_of_requests
Definition: rate_control_for.h:56