diff options
| author | tv <tv@krebsco.de> | 2026-11-06 06:35:24 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-11-06 06:35:24 +0100 |
| commit | b4948712867819c20efcf2d4eb06ee9272196695 (patch) | |
| tree | f8b8940eb35a2ce07abbcb368d253cd2857f4986 | |
| parent | 028bdaae355d677571bd21764caa17acb3687e78 (diff) | |
soak quiet after records
| -rw-r--r-- | src/simtest/soak.rs | 25 |
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), |
