Skip to content

Commit

Permalink
retry mechanism addition to download bitcoind tarball
Browse files Browse the repository at this point in the history
  • Loading branch information
GitGab19 committed Jan 24, 2025
1 parent d96e4b0 commit 9ec4466
Showing 1 changed file with 45 additions and 11 deletions.
56 changes: 45 additions & 11 deletions roles/tests-integration/lib/template_provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,50 @@ use tar::Archive;

const VERSION_TP: &str = "0.1.13";

fn download_bitcoind_tarball(download_url: &str) -> Vec<u8> {
let response = minreq::get(download_url)
.send()
.unwrap_or_else(|_| panic!("Cannot reach URL: {}", download_url));
assert_eq!(
response.status_code, 200,
"URL {} didn't return 200",
download_url
);
response.as_bytes().to_vec()
fn download_bitcoind_tarball_with_retry(download_url: &str, retries: usize) -> Vec<u8> {
for attempt in 0..retries {
let response = minreq::get(download_url).send();
match response {
Ok(res) if res.status_code == 200 => {
return res.as_bytes().to_vec();
}
Ok(res) if res.status_code == 503 => {
// If the response is 503, log and prepare for retry
eprintln!(
"Attempt {}: URL {} returned status code 503 (Service Unavailable)",
attempt + 1,
download_url
);
}
Ok(res) => {
// For other status codes, log and stop retrying
panic!(
"URL {} returned unexpected status code {}. Aborting.",
download_url,
res.status_code
);
}
Err(err) => {
eprintln!(
"Attempt {}: Failed to fetch URL {}: {:?}",
attempt + 1,
download_url,
err
);
}
}

if attempt < retries - 1 {
let delay = 2u64.pow(attempt as u32);
eprintln!(
"Retrying in {} seconds (exponential backoff)...",
delay
);
std::thread::sleep(std::time::Duration::from_secs(delay));
}
}
// If all retries fail, panic with an error message
panic!("Cannot reach URL {} after {} attempts", download_url, retries);
}

fn read_tarball_from_file(path: &str) -> Vec<u8> {
Expand Down Expand Up @@ -105,7 +139,7 @@ impl TemplateProvider {
"{}/sv2-tp-{}/{}",
download_endpoint, VERSION_TP, download_filename
);
download_bitcoind_tarball(&url)
download_bitcoind_tarball_with_retry(&url, 10)
}
};

Expand Down

0 comments on commit 9ec4466

Please sign in to comment.