aboutsummaryrefslogtreecommitdiffstats
path: root/src/swarm/working_links.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-06 05:33:59 +0100
committertv <tv@krebsco.de>2026-11-06 05:33:59 +0100
commit545a8848a97b77899c96a8047f98d7e2f1931dab (patch)
tree8c32be86370e36ac6afe05e2455f6ecd0d1fcd8c /src/swarm/working_links.rs
parent003207f94830fed0def25b49a7e6fc61655ec934 (diff)
bench waits for recorded links
Diffstat (limited to 'src/swarm/working_links.rs')
-rw-r--r--src/swarm/working_links.rs26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/swarm/working_links.rs b/src/swarm/working_links.rs
index 621ea6c..6f07375 100644
--- a/src/swarm/working_links.rs
+++ b/src/swarm/working_links.rs
@@ -43,6 +43,17 @@ const UP_FOR: u32 = 1;
#[derive(Default)]
pub(crate) struct Pending {
since: HashMap<String, Instant>,
+ /// Checks done (`check`), for the benchmark to wait for one (`settled`).
+ #[cfg(test)]
+ checks: u64,
+}
+
+/// How many checks were done, and whether none of our links differs from our record
+/// (nothing awaits its hold).
+#[cfg(test)]
+pub(crate) fn settled(state: &AppState) -> (u64, bool) {
+ let pending = state.working_links.lock_or_recover();
+ (pending.checks, pending.since.is_empty())
}
/// With the peer worker's periodic pass (every 5 s): whom we reach now, against the
@@ -76,13 +87,14 @@ pub(crate) async fn check(state: &AppState) {
let replica = state.doc.read().await;
members::links(&replica.doc, &me)
};
- let next = decide(
- &mut state.working_links.lock_or_recover(),
- &recorded,
- &links,
- now,
- state.timing.keepalive,
- );
+ let next = {
+ let mut pending = state.working_links.lock_or_recover();
+ #[cfg(test)]
+ {
+ pending.checks += 1;
+ }
+ decide(&mut pending, &recorded, &links, now, state.timing.keepalive)
+ };
if next == recorded {
return;
}