in agent/src/artifact/upload.rs [49:123]
fn watch_bep_json_file(
dry: bool,
debug: bool,
build_event_json_file: &Path,
mode: Mode,
delay: Option<Duration>,
monitor_flaky_tests: bool,
) -> Result<()> {
if let Some(delay) = delay {
sleep(delay);
}
let status = ["FAILED", "TIMEOUT", "FLAKY"];
let mut parser = BepJsonParser::new(build_event_json_file);
let max_retries = 5;
let mut retries = max_retries;
let mut last_offset = 0;
let mut uploader = Uploader::new();
'parse_loop: loop {
match parser.parse() {
Ok(_) => {
if parser.offset != last_offset {
// We have made progress, reset the retry counter
retries = max_retries;
last_offset = parser.offset;
let local_exec_root = parser.local_exec_root.as_ref().map(|str| Path::new(str));
for test_summary in parser
.test_summaries
.iter()
.filter(|test_result| status.contains(&test_result.overall_status.as_str()))
{
for failed_test in test_summary.failed.iter() {
if let Err(error) = upload_test_log(
&mut uploader,
dry,
local_exec_root,
&failed_test.uri,
mode,
) {
error!("{:?}", error);
}
}
}
parser.test_summaries.clear();
}
if parser.done {
break 'parse_loop;
}
}
Err(error) => {
retries -= 1;
// Abort since we keep getting errors
if retries == 0 {
return Err(error);
}
error!("{:?}", error);
}
}
sleep(Duration::from_secs(1));
}
let should_upload_bep_json_file =
debug || (monitor_flaky_tests && parser.has_overall_test_status("FLAKY"));
if should_upload_bep_json_file {
if let Err(error) = upload_bep_json_file(&mut uploader, dry, build_event_json_file, mode) {
error!("{:?}", error);
}
}
Ok(())
}