From 3053b20676f995f14925bbe8b11f0d642e5e978d Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Fri, 5 Dec 2025 22:00:17 -0500 Subject: [PATCH] feat: for exponential backoff --- src/client/util_backoff.ml | 13 +++++++++++++ src/client/util_backoff.mli | 12 ++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 src/client/util_backoff.ml create mode 100644 src/client/util_backoff.mli diff --git a/src/client/util_backoff.ml b/src/client/util_backoff.ml new file mode 100644 index 00000000..4bc50ab2 --- /dev/null +++ b/src/client/util_backoff.ml @@ -0,0 +1,13 @@ +type t = { + mutable delay_s: float; + min_delay_s: float; + max_delay_s: float; +} + +let create () = { delay_s = 0.001; min_delay_s = 0.001; max_delay_s = 20. } + +let on_success self = self.delay_s <- max self.min_delay_s (self.delay_s /. 10.) + +let on_error self = self.delay_s <- min self.max_delay_s (self.delay_s *. 2.) + +let[@inline] cur_duration_s self = self.delay_s diff --git a/src/client/util_backoff.mli b/src/client/util_backoff.mli new file mode 100644 index 00000000..f097f8ae --- /dev/null +++ b/src/client/util_backoff.mli @@ -0,0 +1,12 @@ +(** Backoff behavior in case of errors *) + +type t +(** Backoff state. Not thread safe *) + +val create : unit -> t + +val on_success : t -> unit + +val on_error : t -> unit + +val cur_duration_s : t -> float