diff options
| author | tv <tv@krebsco.de> | 2026-11-06 04:32:33 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-11-06 04:32:33 +0100 |
| commit | 8a37ace76af52a3497213d5aa5531c85726e1ef6 (patch) | |
| tree | 27ab40363dfa46f5ba95c73a1bcd1dae6f7919c6 /src/swarm/links.rs | |
| parent | c85e4efec5bf8c5d83401816b6de4f46fbedd99e (diff) | |
links member from the view
Diffstat (limited to 'src/swarm/links.rs')
| -rw-r--r-- | src/swarm/links.rs | 15 |
1 files changed, 10 insertions, 5 deletions
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"); |
