Zig capped exponential backoff retry loop
Zig
const std = @import("std");
fn withRetry(max_attempts: usize, op: anytype) !u64 {
std.debug.assert(max_attempts > 0);
var prng = std.Random.DefaultPrng.init(@intCast(std.time.milliTimestamp()));
const rnd = prng.random();
var delay_ms: u64 = 100;
var attempt: usize = 0;
while (attempt < max_attempts) : (attempt += 1) {
if (op()) |value| return value else |err| {
if (attempt + 1 == max_attempts) return err;
const jitter = rnd.intRangeAtMost(u64, 0, delay_ms);
std.Thread.sleep(jitter * std.time.ns_per_ms);
delay_ms = @min(delay_ms * 2, 10_000);
}
}
unreachable;
}