Skip to content

Commit 5084314

Browse files
committed
refactor(coprocessor): simplify solc retry helper
1 parent b3461f6 commit 5084314

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

coprocessor/fhevm-engine/build-utils/solc_retry.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,34 @@ use foundry_compilers::{error::SolcError, solc::Solc};
22
use semver::Version;
33
use std::{thread, time::Duration};
44

5-
const SOLC_INSTALL_RETRY_ATTEMPTS: usize = 5;
5+
const SOLC_INSTALL_RETRY_ATTEMPTS: u64 = 5;
6+
const SOLC_INSTALL_RETRY_BASE_BACKOFF_MS: u64 = 200;
67

78
fn is_etxtbsy(err: &SolcError) -> bool {
89
matches!(err, SolcError::Io(io_err) if io_err.source().kind() == std::io::ErrorKind::ExecutableFileBusy || io_err.source().raw_os_error() == Some(26))
910
}
1011

12+
fn backoff_ms(attempt: u64) -> u64 {
13+
attempt * SOLC_INSTALL_RETRY_BASE_BACKOFF_MS
14+
}
15+
1116
pub(crate) fn find_or_install_solc(version: &Version) -> Solc {
12-
for attempt in 1..=SOLC_INSTALL_RETRY_ATTEMPTS {
17+
let mut attempt = 1_u64;
18+
loop {
1319
match Solc::find_or_install(version) {
1420
Ok(solc) => return solc,
1521
Err(err) => {
1622
if is_etxtbsy(&err) && attempt < SOLC_INSTALL_RETRY_ATTEMPTS {
17-
let backoff = Duration::from_millis((attempt as u64) * 200);
23+
let backoff_ms = backoff_ms(attempt);
1824
println!(
19-
"cargo:warning=solc install race (ETXTBSY), retrying attempt {attempt}/{SOLC_INSTALL_RETRY_ATTEMPTS} after {:?}",
20-
backoff
25+
"cargo:warning=solc install race (ETXTBSY), retrying attempt {attempt}/{SOLC_INSTALL_RETRY_ATTEMPTS} after {backoff_ms}ms"
2126
);
22-
thread::sleep(backoff);
27+
thread::sleep(Duration::from_millis(backoff_ms));
28+
attempt += 1;
2329
} else {
2430
panic!("Failed to find or install solc {version}: {err:?}");
2531
}
2632
}
2733
}
2834
}
29-
30-
unreachable!("solc install retry loop exited unexpectedly")
3135
}

0 commit comments

Comments
 (0)