From 15ada877cfe9e37e143d91240d2291dca3002bc6 Mon Sep 17 00:00:00 2001 From: cuiweixie Date: Sun, 16 Nov 2025 19:26:18 +0800 Subject: [PATCH 1/2] 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) } } } From 20c798e4ebc0c610c370fcb2898faa5e2a660a6c Mon Sep 17 00:00:00 2001 From: cuiweixie Date: Tue, 25 Nov 2025 12:05:42 +0800 Subject: [PATCH 2/2] fix: break outer --- p2p/discover/table.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/p2p/discover/table.go b/p2p/discover/table.go index 685efc7e9f..791f9075f0 100644 --- a/p2p/discover/table.go +++ b/p2p/discover/table.go @@ -256,11 +256,12 @@ func (tab *Table) findnodeByID(target enode.ID, nresults int, preferLive bool) * liveNodes := &nodesByDistance{target: target} var liveNodesFound = false if preferLive { + outer: for _, b := range &tab.buckets { for _, n := range b.entries { if n.isValidatedLive { liveNodesFound = true - break + break outer } } }