diff --git a/components/chainhook-sdk/src/indexer/bitcoin/mod.rs b/components/chainhook-sdk/src/indexer/bitcoin/mod.rs index 44c999b86..997c2c0bd 100644 --- a/components/chainhook-sdk/src/indexer/bitcoin/mod.rs +++ b/components/chainhook-sdk/src/indexer/bitcoin/mod.rs @@ -153,18 +153,21 @@ pub async fn download_and_parse_block_with_retry( ctx: &Context, ) -> Result { let mut errors_count = 0; + let max_retries = 10; let block = loop { match download_and_parse_block(http_client, block_hash, bitcoin_config, ctx).await { Ok(result) => break result, - Err(_e) => { + Err(e) => { errors_count += 1; - if errors_count > 3 { + if errors_count > 3 && errors_count < max_retries { ctx.try_log(|logger| { slog::warn!( logger, - "unable to fetch and parse block #{block_hash}: will retry in a few seconds (attempt #{errors_count}).", + "unable to fetch and parse block #{block_hash}: will retry in a few seconds (attempt #{errors_count}). Error: {e}", ) }); + } else if errors_count == max_retries { + return Err(format!("unable to fetch and parse block #{block_hash} after {errors_count} attempts. Error: {e}")); } std::thread::sleep(std::time::Duration::from_secs(1)); } @@ -180,18 +183,21 @@ pub async fn retrieve_block_hash_with_retry( ctx: &Context, ) -> Result { let mut errors_count = 0; + let max_retries = 10; let block_hash = loop { match retrieve_block_hash(http_client, block_height, bitcoin_config, ctx).await { Ok(result) => break result, - Err(_e) => { + Err(e) => { errors_count += 1; - if errors_count > 3 { + if errors_count > 3 && errors_count < max_retries { ctx.try_log(|logger| { slog::warn!( logger, - "unable to retrieve block hash #{block_height}: will retry in a few seconds (attempt #{errors_count}).", + "unable to retrieve block hash #{block_height}: will retry in a few seconds (attempt #{errors_count}). Error: {e}", ) }); + } else if errors_count == max_retries { + return Err(format!("unable to retrieve block hash #{block_height} after {errors_count} attempts. Error: {e}")); } std::thread::sleep(std::time::Duration::from_secs(2)); }