summaryrefslogtreecommitdiffstats
path: root/src/remake/catchup.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-24 20:09:15 +0200
committertv <tv@krebsco.de>2026-10-24 20:09:15 +0200
commit325c4a2f0fff3a9a7253b7f040c1f71e95739109 (patch)
tree5ae9a8c38885733a4f2d238fe485e211e7343825 /src/remake/catchup.rs
parent859b3d0a361f883380a381a3a87d6286dbdd2db0 (diff)
follow and download from ready members only
Diffstat (limited to 'src/remake/catchup.rs')
-rw-r--r--src/remake/catchup.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/remake/catchup.rs b/src/remake/catchup.rs
index 39b9550..56aeee1 100644
--- a/src/remake/catchup.rs
+++ b/src/remake/catchup.rs
@@ -71,11 +71,13 @@ pub(super) async fn check<H: Host>(host: &H) {
}
let local = host.current_epoch();
+ // Only ready members count: a rejoining peer advertises an epoch it doesn't hold
+ // yet, and a node of another swarm (or a stranger) advertises one that isn't ours.
let mut ahead: Vec<(String, Epoch)> = host
.peer_summaries()
.await
.into_iter()
- .filter(|peer| peer.active)
+ .filter(|peer| peer.serves())
.filter_map(|peer| peer.epoch.map(|epoch| (peer.id, epoch)))
.filter(|(_, epoch)| epoch.generation > local.generation)
.collect();