Repository: ethereum/go-ethereum (language: go)

Issue:
Make discv5 resp timeout configurable
We need a more longer timeout in portal network, it's better to make discv5 resp timeout configurable.


Discussion / hints:

Fix patch:
diff --git a/p2p/discover/common.go b/p2p/discover/common.go
index cabc5c796232..767cc23b9242 100644
--- a/p2p/discover/common.go
+++ b/p2p/discover/common.go
@@ -49,8 +49,9 @@ type Config struct {
 	// All remaining settings are optional.
 
 	// Packet handling configuration:
-	NetRestrict *netutil.Netlist  // list of allowed IP networks
-	Unhandled   chan<- ReadPacket // unhandled packets are sent on this channel
+	NetRestrict   *netutil.Netlist  // list of allowed IP networks
+	Unhandled     chan<- ReadPacket // unhandled packets are sent on this channel
+	V5RespTimeout time.Duration     // timeout for v5 queries
 
 	// Node table configuration:
 	Bootnodes               []*enode.Node // list of bootstrap nodes
@@ -73,6 +74,9 @@ func (cfg Config) withDefaults() Config {
 	if cfg.RefreshInterval == 0 {
 		cfg.RefreshInterval = 30 * time.Minute
 	}
+	if cfg.V5RespTimeout == 0 {
+		cfg.V5RespTimeout = 700 * time.Millisecond
+	}
 
 	// Debug/test settings:
 	if cfg.Log == nil {
diff --git a/p2p/discover/v5_udp.go b/p2p/discover/v5_udp.go
index 4453d1069534..48256ea4dee0 100644
--- a/p2p/discover/v5_udp.go
+++ b/p2p/discover/v5_udp.go
@@ -42,8 +42,6 @@ const (
 	lookupRequestLimit      = 3  // max requests against a single node during lookup
 	findnodeResultLimit     = 16 // applies in FINDNODE handler
 	totalNodesResponseLimit = 5  // applies in waitForNodes
-
-	respTimeoutV5 = 700 * time.Millisecond
 )
 
 // codecV5 is implemented by v5wire.Codec (and testCodec).
@@ -71,6 +69,7 @@ type UDPv5 struct {
 	log          log.Logger
 	clock        mclock.Clock
 	validSchemes enr.IdentityScheme
+	respTimeout  time.Duration
 
 	// misc buffers used during message handling
 	logcontext []interface{}
@@ -158,6 +157,7 @@ func newUDPv5(conn UDPConn, ln *enode.LocalNode, cfg Config) (*UDPv5, error) {
 		log:          cfg.Log,
 		validSchemes: cfg.ValidSchemes,
 		clock:        cfg.Clock,
+		respTimeout:  cfg.V5RespTimeout,
 		// channels into dispatch
 		packetInCh:    make(chan ReadPacket, 1),
 		readNextCh:    make(chan struct{}, 1),
@@ -576,7 +576,7 @@ func (t *UDPv5) startResponseTimeout(c *callV5) {
 		timer mclock.Timer
 		done  = make(chan struct{})
 	)
-	timer = t.clock.AfterFunc(respTimeoutV5, func() {
+	timer = t.clock.AfterFunc(t.respTimeout, func() {
 		<-done
 		select {
 		case t.respTimeoutCh <- &callTimeout{c, timer}:


Test patch: