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
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -82,4 +87,10 @@ 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