diff --git a/nano/lib/rate_limiting.cpp b/nano/lib/rate_limiting.cpp index 2a4715c9a..ced8828cd 100644 --- a/nano/lib/rate_limiting.cpp +++ b/nano/lib/rate_limiting.cpp @@ -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) { // 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 (); } +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 */ @@ -82,4 +87,10 @@ void nano::rate_limiter::reset (std::size_t limit_a, double burst_ratio_a) { nano::lock_guard guard{ mutex }; bucket.reset (static_cast (limit_a * burst_ratio_a), limit_a); +} + +std::size_t nano::rate_limiter::size () const +{ + nano::lock_guard guard{ mutex }; + return bucket.size (); } \ No newline at end of file diff --git a/nano/lib/rate_limiting.hpp b/nano/lib/rate_limiting.hpp index cf377cb68..3ba0f3b77 100644 --- a/nano/lib/rate_limiting.hpp +++ b/nano/lib/rate_limiting.hpp @@ -38,12 +38,13 @@ public: */ 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 */ 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: void refill (); @@ -71,6 +72,8 @@ public: bool should_pass (std::size_t buffer_size); void reset (std::size_t limit, double burst_ratio = 1.0); + std::size_t size () const; + private: nano::rate::token_bucket bucket; mutable nano::mutex mutex;