Up

Module Throttled_rate_limiter

A Throttled_rate_limiter combines a Token_bucket and a Throttle. Unlike a Token_bucket jobs cannot consume variable numbers of tokens, but the number of outstanding jobs is also limited to max_concurrent_jobs. Like a Throttle finish_job must be called once, and only once when a job is completed.

Signature

type t = private limiter
val create_exn : now:Time.t -> burst_size:int -> sustained_rate_per_sec:float -> max_concurrent_jobs:int -> t
val try_start_job : t -> now:Time.t -> [
| `Start
| `Max_concurrent_jobs_running
| `Unable_until_at_least of Time.t
]
val finish_job : t -> now:Time.t -> unit