Skip to content

Commit 5985ba0

Browse files
committed
fix(runner): check whether artifact contains any elements
The zstd compressed file will never be empty on disk, so we need to check the contents.
1 parent 622460e commit 5985ba0

2 files changed

Lines changed: 23 additions & 3 deletions

File tree

crates/runner-shared/src/artifacts/memtrack.rs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use libc::pid_t;
22
use serde::{Deserialize, Serialize};
3-
use std::io::{BufWriter, Read, Write};
3+
use std::io::{BufReader, BufWriter, Read, Write};
44

55
#[derive(Debug, Clone, Serialize, Deserialize)]
66
pub struct MemtrackArtifact {
@@ -26,6 +26,13 @@ impl MemtrackArtifact {
2626
deserializer: rmp_serde::Deserializer::new(decoder),
2727
})
2828
}
29+
30+
pub fn is_empty<R: std::io::Read>(reader: R) -> bool {
31+
let Ok(mut stream) = MemtrackArtifact::decode_streamed(BufReader::new(reader)) else {
32+
return true;
33+
};
34+
stream.next().is_none()
35+
}
2936
}
3037

3138
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
@@ -138,4 +145,17 @@ mod tests {
138145

139146
Ok(())
140147
}
148+
149+
#[test]
150+
fn test_artifact_is_empty() -> anyhow::Result<()> {
151+
let artifact = MemtrackArtifact { events: vec![] };
152+
153+
let mut buf = Vec::new();
154+
artifact.encode_to_writer(&mut buf)?;
155+
156+
let reader = Cursor::new(buf);
157+
assert!(MemtrackArtifact::is_empty(reader));
158+
159+
Ok(())
160+
}
141161
}

src/executor/memory/executor.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ impl Executor for MemoryExecutor {
128128
.to_string_lossy()
129129
.contains(MemtrackArtifact::name())
130130
})
131-
// Filter empty files:
132-
.filter(|entry| entry.metadata().map(|m| m.len() == 0).unwrap_or_default())
131+
.flat_map(|f| std::fs::File::open(f.path()))
132+
.filter(|file| !MemtrackArtifact::is_empty(file))
133133
.collect();
134134
if files.is_empty() {
135135
bail!(

0 commit comments

Comments
 (0)