From 028bdaae355d677571bd21764caa17acb3687e78 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 6 Nov 2026 06:19:16 +0100 Subject: soak counts records --- src/simtest/soak.rs | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) (limited to 'src/simtest') diff --git a/src/simtest/soak.rs b/src/simtest/soak.rs index eb024d3..d14ff03 100644 --- a/src/simtest/soak.rs +++ b/src/simtest/soak.rs @@ -265,15 +265,22 @@ async fn soak_with_churn() { throughputs = throughputs.max(node.throughput.lock_or_recover().len()); traffic = traffic.max(node.traffic.len()); } - let recorded = { - let replica = nodes[0].doc.read().await; + let records = |node: AppState| async move { + let replica = node.doc.read().await; members::members(&replica.doc) - .iter() - .filter(|member| { - members::links(&replica.doc, member) != members::RecordedLinks::default() + .into_iter() + .map(|member| { + let links = members::links(&replica.doc, &member); + (member, links) }) - .count() + .filter(|(_, links)| *links != members::RecordedLinks::default()) + .collect::>() }; + let written = |nodes: &[AppState]| -> u64 { + nodes.iter().map(crate::swarm::working_links::written).sum() + }; + let recorded = records(nodes[0].clone()).await.len(); + let written_during = written(&nodes); let end_tasks = tokio::runtime::Handle::current() .metrics() .num_alive_tasks(); @@ -290,7 +297,8 @@ async fn soak_with_churn() { println!( " per node at most: {peers} peers, round trips of {rtts}, throughput of \ {throughputs}, traffic of {traffic}; {heals} heals; {recorded} members with links \ - recorded; tasks alive {warm_tasks} after the warm-up, {end_tasks} at the end" + recorded, {written_during} records written (by the nodes running at the end); \ + 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. @@ -315,12 +323,19 @@ async fn soak_with_churn() { }; println!( " quiet, per node and minute: {:.1} SYNC, {:.1} STATUS, {:.1} STATUS_REPLY, \ - {:.1} PING/PONG", + {:.1} PING/PONG; {} records written", per_node_minute(0), per_node_minute(1), per_node_minute(2), per_node_minute(3), + written(&nodes) - written_during, ); + for (member, links) in records(nodes[0].clone()).await { + println!( + " recorded after the quiet phase by {member}: unreached {:?}, reached {:?}", + links.unreached, links.reached + ); + } for (what, most) in [ ("peers", peers), -- cgit v1.3.1