From 15ada877cfe9e37e143d91240d2291dca3002bc6 Mon Sep 17 00:00:00 2001 From: cuiweixie Date: Sun, 16 Nov 2025 19:26:18 +0800 Subject: [PATCH] p2p/discover: optimize findnodeByID --- p2p/discover/table.go | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/p2p/discover/table.go b/p2p/discover/table.go index e5b2c7c8c5..685efc7e9f 100644 --- a/p2p/discover/table.go +++ b/p2p/discover/table.go @@ -254,11 +254,29 @@ func (tab *Table) findnodeByID(target enode.ID, nresults int, preferLive bool) * // is O(tab.len() * nresults). nodes := &nodesByDistance{target: target} liveNodes := &nodesByDistance{target: target} - for _, b := range &tab.buckets { - for _, n := range b.entries { - nodes.push(n.Node, nresults) - if preferLive && n.isValidatedLive { - liveNodes.push(n.Node, nresults) + var liveNodesFound = false + if preferLive { + for _, b := range &tab.buckets { + for _, n := range b.entries { + if n.isValidatedLive { + liveNodesFound = true + break + } + } + } + } + if liveNodesFound { + for _, b := range &tab.buckets { + for _, n := range b.entries { + if n.isValidatedLive { + liveNodes.push(n.Node, nresults) + } + } + } + } else { + for _, b := range &tab.buckets { + for _, n := range b.entries { + nodes.push(n.Node, nresults) } } }