Move to rate_limiting.hpp

This commit is contained in:
Piotr Wójcik 2024-09-09 20:42:15 +02:00
commit 87aeef274d
6 changed files with 41 additions and 35 deletions

View file

@ -4,6 +4,10 @@
#include <limits> #include <limits>
/*
* token_bucket
*/
nano::rate::token_bucket::token_bucket (std::size_t max_token_count_a, std::size_t refill_rate_a) nano::rate::token_bucket::token_bucket (std::size_t max_token_count_a, std::size_t refill_rate_a)
{ {
reset (max_token_count_a, refill_rate_a); reset (max_token_count_a, refill_rate_a);
@ -62,3 +66,22 @@ void nano::rate::token_bucket::reset (std::size_t max_token_count_a, std::size_t
refill_rate = refill_rate_a; refill_rate = refill_rate_a;
last_refill = std::chrono::steady_clock::now (); last_refill = std::chrono::steady_clock::now ();
} }
/*
* rate_limiter
*/
nano::rate_limiter::rate_limiter (std::size_t limit_a, double burst_ratio_a) :
bucket (static_cast<std::size_t> (limit_a * burst_ratio_a), limit_a)
{
}
bool nano::rate_limiter::should_pass (std::size_t message_size_a)
{
return bucket.try_consume (nano::narrow_cast<unsigned int> (message_size_a));
}
void nano::rate_limiter::reset (std::size_t limit_a, double burst_ratio_a)
{
bucket.reset (static_cast<std::size_t> (limit_a * burst_ratio_a), limit_a);
}

View file

@ -59,3 +59,19 @@ private:
static std::size_t constexpr unlimited_rate_sentinel{ static_cast<std::size_t> (1e9) }; static std::size_t constexpr unlimited_rate_sentinel{ static_cast<std::size_t> (1e9) };
}; };
} }
namespace nano
{
class rate_limiter final
{
public:
// initialize with limit 0 = unbounded
rate_limiter (std::size_t limit, double burst_ratio);
bool should_pass (std::size_t buffer_size);
void reset (std::size_t limit, double burst_ratio);
private:
nano::rate::token_bucket bucket;
};
}

View file

@ -1,25 +1,6 @@
#include <nano/lib/utility.hpp> #include <nano/lib/utility.hpp>
#include <nano/node/bandwidth_limiter.hpp> #include <nano/node/bandwidth_limiter.hpp>
/*
* rate_limiter
*/
nano::rate_limiter::rate_limiter (std::size_t limit_a, double burst_ratio_a) :
bucket (static_cast<std::size_t> (limit_a * burst_ratio_a), limit_a)
{
}
bool nano::rate_limiter::should_pass (std::size_t message_size_a)
{
return bucket.try_consume (nano::narrow_cast<unsigned int> (message_size_a));
}
void nano::rate_limiter::reset (std::size_t limit_a, double burst_ratio_a)
{
bucket.reset (static_cast<std::size_t> (limit_a * burst_ratio_a), limit_a);
}
/* /*
* outbound_bandwidth_limiter * outbound_bandwidth_limiter
*/ */

View file

@ -21,19 +21,6 @@ nano::bandwidth_limit_type to_bandwidth_limit_type (nano::transport::traffic_typ
/** /**
* Class that tracks and manages bandwidth limits for IO operations * Class that tracks and manages bandwidth limits for IO operations
*/ */
class rate_limiter final
{
public:
// initialize with limit 0 = unbounded
rate_limiter (std::size_t limit, double burst_ratio);
bool should_pass (std::size_t buffer_size);
void reset (std::size_t limit, double burst_ratio);
private:
nano::rate::token_bucket bucket;
};
class outbound_bandwidth_limiter final class outbound_bandwidth_limiter final
{ {
public: // Config public: // Config

View file

@ -4,8 +4,7 @@
#include <nano/lib/locks.hpp> #include <nano/lib/locks.hpp>
#include <nano/lib/numbers.hpp> #include <nano/lib/numbers.hpp>
#include <nano/lib/observer_set.hpp> #include <nano/lib/observer_set.hpp>
#include <nano/lib/timer.hpp> #include <nano/lib/rate_limiting.hpp>
#include <nano/node/bandwidth_limiter.hpp>
#include <nano/node/bootstrap/bootstrap_config.hpp> #include <nano/node/bootstrap/bootstrap_config.hpp>
#include <nano/node/bootstrap_ascending/account_sets.hpp> #include <nano/node/bootstrap_ascending/account_sets.hpp>
#include <nano/node/bootstrap_ascending/common.hpp> #include <nano/node/bootstrap_ascending/common.hpp>

View file

@ -3,7 +3,7 @@
#include <nano/lib/blocks.hpp> #include <nano/lib/blocks.hpp>
#include <nano/lib/locks.hpp> #include <nano/lib/locks.hpp>
#include <nano/lib/processing_queue.hpp> #include <nano/lib/processing_queue.hpp>
#include <nano/node/bandwidth_limiter.hpp> #include <nano/lib/rate_limiting.hpp>
#include <nano/node/blockprocessor.hpp> #include <nano/node/blockprocessor.hpp>
#include <nano/node/fwd.hpp> #include <nano/node/fwd.hpp>
#include <nano/secure/common.hpp> #include <nano/secure/common.hpp>