Move to rate_limiting.hpp
This commit is contained in:
parent
07637c8953
commit
87aeef274d
6 changed files with 41 additions and 35 deletions
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue