Skip to content

Commit 76f9de1

Browse files
committed
retry mx-scenario - set max attempts to retry
1 parent bef34bc commit 76f9de1

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

framework/meta/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ pathdiff = "0.2.1"
4242
common-path = "1.0.0"
4343
bip39 = "2.0.0"
4444
home = "=0.5.11"
45+
anyhow = "1.0"
4546

4647
[dependencies.multiversx-sc-meta-lib]
4748
version = "=0.59.1"

framework/meta/src/cmd/install/install_scenario_go.rs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use anyhow::{anyhow, Result};
12
use core::time;
23
use serde_json::Value;
34
use std::{
@@ -11,6 +12,9 @@ use multiversx_sc_meta_lib::print_util::println_green;
1112

1213
use super::system_info::{get_system_info, SystemInfo};
1314

15+
const API_LIMIT_EXCEEDED: &str = "api rate limit exceeded for";
16+
const MAX_RETRIES: u64 = 5;
17+
const RETRY_DELAY: time::Duration = time::Duration::from_secs(2);
1418
const USER_AGENT: &str = "multiversx-sc-meta";
1519
const SCENARIO_CLI_RELEASES_BASE_URL: &str =
1620
"https://api.github.com/repos/multiversx/mx-chain-scenario-cli-go/releases";
@@ -80,11 +84,13 @@ impl ScenarioGoInstaller {
8084
}
8185
}
8286

83-
async fn get_scenario_go_release_json(&self) -> Result<String, reqwest::Error> {
87+
async fn get_scenario_go_release_json(&self) -> Result<String> {
8488
let release_url = self.release_url();
8589
println_green(format!("Retrieving release info: {release_url}"));
8690

87-
loop {
91+
let mut wait_time = RETRY_DELAY;
92+
93+
for i in 0..MAX_RETRIES {
8894
let response = reqwest::Client::builder()
8995
.user_agent(&self.user_agent)
9096
.build()?
@@ -94,13 +100,19 @@ impl ScenarioGoInstaller {
94100
.text()
95101
.await?;
96102

97-
if !response.contains("API rate limit exceeded for") {
103+
if !response.to_lowercase().contains(API_LIMIT_EXCEEDED) {
98104
return Ok(response);
99105
}
100106

101-
println!("API rate limit exceeded, retrying...");
102-
sleep(time::Duration::from_secs(5));
107+
println!("API rate limit exceeded, attempt {i} retrying...");
108+
sleep(wait_time);
109+
wait_time += RETRY_DELAY;
103110
}
111+
112+
Err(anyhow!(
113+
"Failed to retrieve release info after {} retries",
114+
MAX_RETRIES
115+
))
104116
}
105117

106118
fn parse_scenario_go_release(&self, raw_json: &str) -> ScenarioGoRelease {

0 commit comments

Comments
 (0)