Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 39 additions & 2 deletions patchbay-runner/src/sim/runner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1580,17 +1580,50 @@ fn rewrite_counted_bare_ref(s: &str, idx: usize, counts: &HashMap<String, usize>
s.to_string()
}

/// Rewrite capture keys in `StepResults` for counted devices.
///
/// Results keys like `"fetcher.size"` (set during template expansion) need to become
/// `"fetcher-0.size"` when the step is expanded for a counted device.
fn rewrite_results_counted_refs(
results: &mut StepResults,
idx: usize,
counts: &HashMap<String, usize>,
) {
let rewrite = |opt: &mut Option<String>| {
if let Some(ref mut key) = opt {
*key = rewrite_counted_bare_ref(key, idx, counts);
}
};
rewrite(&mut results.duration);
rewrite(&mut results.up_bytes);
rewrite(&mut results.down_bytes);
rewrite(&mut results.latency_ms);
}

fn rewrite_step_counted_refs(step: &mut Step, idx: usize, counts: &HashMap<String, usize>) {
match step {
Step::Run { cmd, requires, .. } => {
Step::Run {
cmd,
requires,
results,
..
} => {
for part in cmd.iter_mut() {
*part = rewrite_counted_refs(part, idx, counts);
}
for req in requires.iter_mut() {
*req = rewrite_counted_bare_ref(req, idx, counts);
}
if let Some(res) = results {
rewrite_results_counted_refs(res, idx, counts);
}
}
Step::Spawn { cmd, requires, .. } => {
Step::Spawn {
cmd,
requires,
results,
..
} => {
if let Some(cmd) = cmd {
for part in cmd.iter_mut() {
*part = rewrite_counted_refs(part, idx, counts);
Expand All @@ -1599,6 +1632,10 @@ fn rewrite_step_counted_refs(step: &mut Step, idx: usize, counts: &HashMap<Strin
for req in requires.iter_mut() {
*req = rewrite_counted_bare_ref(req, idx, counts);
}
// Rewrite results capture keys (e.g. "fetcher.size" → "fetcher-0.size")
if let Some(res) = results {
rewrite_results_counted_refs(res, idx, counts);
}
}
Step::GenFile { content, .. } => {
*content = rewrite_counted_refs(content, idx, counts);
Expand Down
5 changes: 2 additions & 3 deletions patchbay/src/netns.rs
Original file line number Diff line number Diff line change
Expand Up @@ -272,9 +272,8 @@ impl Worker {
let mut builder = tokio::runtime::Builder::new_current_thread();
builder.enable_all();
let overlay_for_threads = thread_opts.dns_overlay.clone();
builder.on_thread_start(move || {
apply_mount_overlay(overlay_for_threads.as_ref())
});
builder
.on_thread_start(move || apply_mount_overlay(overlay_for_threads.as_ref()));
let rt = builder.build().context("build tokio runtime")?;
Ok((ns_fd, rt))
})();
Expand Down
5 changes: 2 additions & 3 deletions patchbay/src/tests/route.rs
Original file line number Diff line number Diff line change
Expand Up @@ -237,9 +237,8 @@ async fn proc_net_route_shows_namespace_routes() -> Result<()> {
.build()
.await?;

let route_content = dev.run_sync(|| {
std::fs::read_to_string("/proc/net/route").context("read /proc/net/route")
})?;
let route_content = dev
.run_sync(|| std::fs::read_to_string("/proc/net/route").context("read /proc/net/route"))?;

// The namespace must contain eth0 with a default route.
assert!(
Expand Down
9 changes: 0 additions & 9 deletions ui/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.