Source file interval_limiter.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
type t = {
min_interval: Mtime.span;
last: Mtime.t Atomic.t;
}
let[@inline] min_interval self = self.min_interval
let create ~min_interval () : t =
{ min_interval; last = Atomic.make Mtime.min_stamp }
let make_attempt (self : t) : bool =
let now = Mtime_clock.now () in
let last = Atomic.get self.last in
let elapsed = Mtime.span last now in
if Mtime.Span.compare elapsed self.min_interval >= 0 then
Atomic.compare_and_set self.last last now
else
false