aboutsummaryrefslogtreecommitdiffstats
path: root/src/simtest/soak.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-06 06:35:24 +0100
committertv <tv@krebsco.de>2026-11-06 06:35:24 +0100
commitb4948712867819c20efcf2d4eb06ee9272196695 (patch)
treef8b8940eb35a2ce07abbcb368d253cd2857f4986 /src/simtest/soak.rs
parent028bdaae355d677571bd21764caa17acb3687e78 (diff)
soak quiet after records
Diffstat (limited to 'src/simtest/soak.rs')
-rw-r--r--src/simtest/soak.rs25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/simtest/soak.rs b/src/simtest/soak.rs
index d14ff03..5a1234b 100644
--- a/src/simtest/soak.rs
+++ b/src/simtest/soak.rs
@@ -301,7 +301,27 @@ async fn soak_with_churn() {
tasks alive {warm_tasks} after the warm-up, {end_tasks} at the end"
);
- // The quiet phase: what the swarm sends with nothing to pass on.
+ // The quiet phase: what the swarm sends with nothing to pass on, once the links
+ // recorded while members were away are taken out again (every node checked since,
+ // with nothing awaiting its hold: `swarm::working_links`).
+ let checks: Vec<u64> = nodes
+ .iter()
+ .map(|node| crate::swarm::working_links::settled(node).0)
+ .collect();
+ let (nodes_ref, checks_ref) = (&nodes, &checks);
+ sim.wait_until(
+ "the links recorded",
+ Duration::from_secs(60),
+ move || async move {
+ nodes_ref.iter().zip(checks_ref).all(|(node, before)| {
+ let (checks, settled) = crate::swarm::working_links::settled(node);
+ checks > *before && settled
+ })
+ },
+ )
+ .await;
+ let settled_after = written(&nodes) - written_during;
+ let written_during = written(&nodes);
let sent = |nodes: &[AppState]| -> [u64; 4] {
let mut sum = [0; 4];
for node in nodes {
@@ -323,7 +343,8 @@ async fn soak_with_churn() {
};
println!(
" quiet, per node and minute: {:.1} SYNC, {:.1} STATUS, {:.1} STATUS_REPLY, \
- {:.1} PING/PONG; {} records written",
+ {:.1} PING/PONG; {} records written (and {settled_after} before it, once all were \
+ back)",
per_node_minute(0),
per_node_minute(1),
per_node_minute(2),