Skip to content

Commit 481c245

Browse files
committed
fix(runner): check benchmark URIs rather than memtrack events
Memory profiling can be empty, if the benchmark has no allocations. We shouldn't fail in those cases.
1 parent 57ce03e commit 481c245

2 files changed

Lines changed: 22 additions & 16 deletions

File tree

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
use std::io::BufReader;
2+
13
use libc::pid_t;
24
use log::debug;
3-
use serde::Serialize;
5+
use serde::{Deserialize, Serialize};
46

57
mod execution_timestamps;
68
mod memtrack;
@@ -10,7 +12,7 @@ pub use memtrack::*;
1012

1113
pub trait ArtifactExt
1214
where
13-
Self: Sized + Serialize,
15+
Self: Sized + Serialize + for<'de> Deserialize<'de>,
1416
{
1517
/// WARNING: This doesn't support generic types
1618
fn name() -> &'static str {
@@ -25,6 +27,11 @@ where
2527
}
2628
}
2729

30+
fn decode_from_reader<R: std::io::Read>(reader: R) -> anyhow::Result<Self> {
31+
let reader = BufReader::new(reader);
32+
rmp_serde::from_read(reader).map_err(anyhow::Error::from)
33+
}
34+
2835
fn encode_to_writer<W: std::io::Write>(&self, mut writer: W) -> anyhow::Result<()> {
2936
let encoded = rmp_serde::to_vec_named(self)?;
3037
writer.write_all(&encoded)?;

src/executor/memory/executor.rs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use async_trait::async_trait;
1616
use ipc_channel::ipc;
1717
use memtrack::MemtrackIpcClient;
1818
use memtrack::MemtrackIpcServer;
19-
use runner_shared::artifacts::{ArtifactExt, ExecutionTimestamps, MemtrackArtifact};
19+
use runner_shared::artifacts::{ArtifactExt, ExecutionTimestamps};
2020
use runner_shared::fifo::Command as FifoCommand;
2121
use runner_shared::fifo::IntegrationMode;
2222
use semver::Version;
@@ -121,28 +121,27 @@ impl Executor for MemoryExecutor {
121121
}
122122

123123
async fn teardown(&self, execution_context: &ExecutionContext) -> Result<()> {
124-
let files: Vec<_> = std::fs::read_dir(execution_context.profile_folder.join("results"))?
124+
let results_dir = execution_context.profile_folder.join("results");
125+
let has_benchmarks = std::fs::read_dir(&results_dir)?
125126
.filter_map(Result::ok)
126-
// Filter out non-memtrack files:
127+
// Filter out non-ExecutionTimestamps files:
127128
.filter(|entry| {
128129
entry
129130
.file_name()
130131
.to_string_lossy()
131-
.contains(MemtrackArtifact::name())
132+
.contains(ExecutionTimestamps::name())
132133
})
133-
.flat_map(|f| std::fs::File::open(f.path()))
134-
.filter(|file| !MemtrackArtifact::is_empty(file))
135-
.collect();
134+
.filter_map(|entry| {
135+
let file = std::fs::File::open(entry.path()).ok()?;
136+
ExecutionTimestamps::decode_from_reader(file).ok()
137+
})
138+
.any(|artifact| !artifact.uri_by_ts.is_empty());
136139

137-
if files.is_empty() {
140+
if !has_benchmarks {
138141
if !execution_context.config.allow_empty {
139-
bail!(
140-
"No memtrack artifact files found. Does the integration support memory profiling?"
141-
);
142+
bail!("No memory results found in profile folder: {results_dir:?}.");
142143
} else {
143-
info!(
144-
"No memtrack artifact files found. Does the integration support memory profiling?"
145-
);
144+
info!("No memory results found in profile folder: {results_dir:?}.");
146145
}
147146
}
148147

0 commit comments

Comments
 (0)