fix: improve exponential backup detection of 429 error
Some checks failed
Test / build (map[name:nightly]) (push) Successful in 2m22s
Test / build (map[name:stable]) (push) Successful in 2m55s
Release Please / Release-plz (push) Failing after 19s

This commit is contained in:
Paul Campbell 2024-12-22 15:35:26 +00:00
parent 5d62b7edd0
commit 8305715471

View file

@ -1,21 +1,34 @@
//
#[macro_export]
macro_rules! backoff {
($backoff_secs:expr, $ctx:expr) => {{
$backoff_secs *= 2;
let jitter = rand::random::<u64>() % 10;
let backoff_secs = 60.min($backoff_secs + jitter);
$crate::p!(
$ctx.prt,
">> Too many requests, backing off for {}s",
backoff_secs
);
tokio::time::sleep(tokio::time::Duration::from_secs(backoff_secs)).await;
}};
}
#[macro_export]
macro_rules! with_exponential_backoff {
($ctx:expr, $operation:expr) => {{
let mut backoff_secs = 1;
loop {
match $operation {
Err(kxio::net::Error::Reqwest(e))
if e.status() == Some(kxio::net::StatusCode::TOO_MANY_REQUESTS) =>
Err(kxio::net::Error::Reqwest(err))
if err.status() == Some(kxio::net::StatusCode::TOO_MANY_REQUESTS) =>
{
backoff_secs *= 2;
let jitter = rand::random::<u64>() % 10;
let backoff_secs = 60.min(backoff_secs + jitter);
$crate::p!(
$ctx.prt,
">> Too many requests, backing off for {}s",
backoff_secs
);
tokio::time::sleep(tokio::time::Duration::from_secs(backoff_secs)).await;
$crate::backoff!(backoff_secs, $ctx)
}
Err(kxio::net::Error::ResponseError { response })
if response.status() == kxio::net::StatusCode::TOO_MANY_REQUESTS =>
{
$crate::backoff!(backoff_secs, $ctx)
}
result => break result,
}