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)
 | 
			
		||||
{
 | 
			
		||||
	// 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
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -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 };
 | 
			
		||||
	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);
 | 
			
		||||
 | 
			
		||||
	/** 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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue