Try adding multiple attempts to launch server for cli

pull/118/head
Chip Senkbeil 2 years ago
parent b9d2e2e57e
commit 94326618c3
No known key found for this signature in database
GPG Key ID: 35EF1F8EC72A4131

@ -5,6 +5,7 @@ use rstest::*;
use std::{
path::PathBuf,
process::{Child, Command as StdCommand, Stdio},
thread,
time::Duration,
};
@ -15,6 +16,10 @@ static ROOT_LOG_DIR: Lazy<PathBuf> = Lazy::new(|| std::env::temp_dir().join("dis
static SESSION_RANDOM: Lazy<u16> = Lazy::new(rand::random);
const TIMEOUT: Duration = Duration::from_secs(3);
// Number of times to retry launching a server before giving up
const LAUNCH_RETRY_CNT: usize = 2;
const LAUNCH_RETRY_TIMEOUT: Duration = Duration::from_millis(250);
#[derive(Deref, DerefMut)]
pub struct CtxCommand<T> {
pub ctx: DistantManagerCtx,
@ -99,14 +104,23 @@ impl DistantManagerCtx {
launch_cmd.arg("manager://localhost");
eprintln!("Spawning launch cmd: {launch_cmd:?}");
let output = launch_cmd.output().expect("Failed to launch server");
if !output.status.success() {
let _ = manager.kill();
panic!(
"Failed to launch: {}",
String::from_utf8_lossy(&output.stderr)
);
for i in 0..=LAUNCH_RETRY_CNT {
eprintln!("[{i}/{LAUNCH_RETRY_CNT}] Spawning launch cmd: {launch_cmd:?}");
let output = launch_cmd.output().expect("Failed to launch server");
let success = output.status.success();
if success {
break;
}
if !success && i == LAUNCH_RETRY_CNT {
let _ = manager.kill();
panic!(
"Failed to launch: {}",
String::from_utf8_lossy(&output.stderr)
);
}
thread::sleep(LAUNCH_RETRY_TIMEOUT);
}
Self {

Loading…
Cancel
Save