Rate limiter size accessor
This commit is contained in:
parent
0ce3dc8f31
commit
d675df77fe
2 changed files with 22 additions and 8 deletions
|
|
@ -45,11 +45,6 @@ void nano::rate::token_bucket::refill ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t nano::rate::token_bucket::largest_burst () const
|
|
||||||
{
|
|
||||||
return max_token_count - smallest_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
void nano::rate::token_bucket::reset (std::size_t max_token_count_a, std::size_t refill_rate_a)
|
void nano::rate::token_bucket::reset (std::size_t max_token_count_a, std::size_t refill_rate_a)
|
||||||
{
|
{
|
||||||
// A token count of 0 indicates unlimited capacity. We use 1e9 as
|
// A token count of 0 indicates unlimited capacity. We use 1e9 as
|
||||||
|
|
@ -63,6 +58,16 @@ void nano::rate::token_bucket::reset (std::size_t max_token_count_a, std::size_t
|
||||||
last_refill = std::chrono::steady_clock::now ();
|
last_refill = std::chrono::steady_clock::now ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::size_t nano::rate::token_bucket::largest_burst () const
|
||||||
|
{
|
||||||
|
return max_token_count - smallest_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::size_t nano::rate::token_bucket::size () const
|
||||||
|
{
|
||||||
|
return current_size;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* rate_limiter
|
* rate_limiter
|
||||||
*/
|
*/
|
||||||
|
|
@ -83,3 +88,9 @@ void nano::rate_limiter::reset (std::size_t limit_a, double burst_ratio_a)
|
||||||
nano::lock_guard<nano::mutex> guard{ mutex };
|
nano::lock_guard<nano::mutex> guard{ mutex };
|
||||||
bucket.reset (static_cast<std::size_t> (limit_a * burst_ratio_a), limit_a);
|
bucket.reset (static_cast<std::size_t> (limit_a * burst_ratio_a), limit_a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::size_t nano::rate_limiter::size () const
|
||||||
|
{
|
||||||
|
nano::lock_guard<nano::mutex> guard{ mutex };
|
||||||
|
return bucket.size ();
|
||||||
|
}
|
||||||
|
|
@ -38,12 +38,13 @@ public:
|
||||||
*/
|
*/
|
||||||
bool try_consume (unsigned tokens_required = 1);
|
bool try_consume (unsigned tokens_required = 1);
|
||||||
|
|
||||||
/** Returns the largest burst observed */
|
|
||||||
std::size_t largest_burst () const;
|
|
||||||
|
|
||||||
/** Update the max_token_count and/or refill_rate_a parameters */
|
/** Update the max_token_count and/or refill_rate_a parameters */
|
||||||
void reset (std::size_t max_token_count, std::size_t refill_rate);
|
void reset (std::size_t max_token_count, std::size_t refill_rate);
|
||||||
|
|
||||||
|
/** Returns the largest burst observed */
|
||||||
|
std::size_t largest_burst () const;
|
||||||
|
std::size_t size () const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void refill ();
|
void refill ();
|
||||||
|
|
||||||
|
|
@ -71,6 +72,8 @@ public:
|
||||||
bool should_pass (std::size_t buffer_size);
|
bool should_pass (std::size_t buffer_size);
|
||||||
void reset (std::size_t limit, double burst_ratio = 1.0);
|
void reset (std::size_t limit, double burst_ratio = 1.0);
|
||||||
|
|
||||||
|
std::size_t size () const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
nano::rate::token_bucket bucket;
|
nano::rate::token_bucket bucket;
|
||||||
mutable nano::mutex mutex;
|
mutable nano::mutex mutex;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue