fix: improve exponential backup detection of 429 error
This commit is contained in:
parent
5d62b7edd0
commit
8305715471
1 changed files with 24 additions and 11 deletions
|
@ -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,
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue