From 8a37ace76af52a3497213d5aa5531c85726e1ef6 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 6 Nov 2026 04:32:33 +0100 Subject: links member from the view --- src/swarm/links.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/swarm/links.rs') diff --git a/src/swarm/links.rs b/src/swarm/links.rs index 2d9071b..ea5564e 100644 --- a/src/swarm/links.rs +++ b/src/swarm/links.rs @@ -616,11 +616,16 @@ pub(crate) async fn unsubscribe(state: &AppState, member: &str) { /// A LINKS from `peer`: answered if it's a member, and not answered lately. pub(crate) async fn answer(state: &AppState, peer: &str, request: LinksRequest) { - let member = { - let replica = state.doc.read().await; - members::members(&replica.doc) - .iter() - .any(|member| member == peer) + // From the neighbours' view, kept as the member list changes: no document read per + // request. + let member = match crate::swarm::topology::listed(state, peer) { + Some(listed) => listed, + None => { + let replica = state.doc.read().await; + members::members(&replica.doc) + .iter() + .any(|member| member == peer) + } }; if !member { debug!(peer = %peer, "Not answering LINKS from a peer that isn't a member"); -- cgit v1.3.1