From 6dbae0397fc31fef44b9f32135d9ab31f1dd5299 Mon Sep 17 00:00:00 2001 From: rkonfj Date: Sun, 31 Mar 2024 13:25:59 +0800 Subject: [PATCH] disco: a better default disco parameters --- cmd/pgcli/vpn/vpn.go | 2 +- disco/disco.go | 8 ++++---- disco/udp.go | 4 ++-- p2p/conn.go | 8 ++++---- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/cmd/pgcli/vpn/vpn.go b/cmd/pgcli/vpn/vpn.go index 6826579..ad4650b 100644 --- a/cmd/pgcli/vpn/vpn.go +++ b/cmd/pgcli/vpn/vpn.go @@ -46,7 +46,7 @@ func init() { Cmd.Flags().StringSlice("peer", []string{}, "specify peers instead of auto-discovery (pg://?alias1=&alias2=)") Cmd.Flags().Int("disco-port-scan-count", 2000, "scan ports count when disco") - Cmd.Flags().Int("disco-challenges-retry", 3, "ping challenges retry count when disco") + Cmd.Flags().Int("disco-challenges-retry", 2, "ping challenges retry count when disco") Cmd.Flags().Duration("disco-challenges-initial-interval", 200*time.Millisecond, "ping challenges initial interval when disco") Cmd.Flags().Float64("disco-challenges-backoff-rate", 1.75, "ping challenges backoff rate when disco") diff --git a/disco/disco.go b/disco/disco.go index be18b8e..e073c64 100644 --- a/disco/disco.go +++ b/disco/disco.go @@ -19,7 +19,7 @@ var ( var defaultDiscoConfig = DiscoConfig{ PortScanCount: 2000, - ChallengesRetry: 3, + ChallengesRetry: 2, ChallengesInitialInterval: 200 * time.Millisecond, ChallengesBackoffRate: 1.75, } @@ -36,7 +36,7 @@ func SetModifyDiscoConfig(modify func(cfg *DiscoConfig)) { modify(&defaultDiscoConfig) } defaultDiscoConfig.PortScanCount = min(max(32, defaultDiscoConfig.PortScanCount), 65535-1024) - defaultDiscoConfig.ChallengesRetry = max(2, defaultDiscoConfig.ChallengesRetry) + defaultDiscoConfig.ChallengesRetry = max(1, defaultDiscoConfig.ChallengesRetry) defaultDiscoConfig.ChallengesInitialInterval = max(10*time.Millisecond, defaultDiscoConfig.ChallengesInitialInterval) defaultDiscoConfig.ChallengesBackoffRate = max(1, defaultDiscoConfig.ChallengesBackoffRate) } @@ -105,7 +105,7 @@ func (peer *PeerContext) Heartbeat(addr *net.UDPAddr) { func (peer *PeerContext) Healthcheck() { if time.Since(peer.CreateTime) > 3*peer.keepaliveInterval { for addr, state := range peer.States { - if time.Since(state.LastActiveTime) > 2*peer.keepaliveInterval { + if time.Since(state.LastActiveTime) > 2*peer.keepaliveInterval+time.Second { if state.LastActiveTime.IsZero() { slog.Debug("[UDP] RemovePeer", "peer", peer.PeerID, "addr", state.Addr) } else { @@ -176,7 +176,7 @@ func (peer *PeerContext) Keepalive() { select { case <-peer.exitSig: ticker.Stop() - slog.Debug("[UDP] Ping exit", "peer", peer.PeerID) + slog.Debug("[UDP] KeepaliveExit", "peer", peer.PeerID) return case <-ticker.C: ping() diff --git a/disco/udp.go b/disco/udp.go index 0797f2e..cb4b2d2 100644 --- a/disco/udp.go +++ b/disco/udp.go @@ -154,10 +154,10 @@ func (c *UDPConn) ensurePeerContext(peerID peer.ID) *PeerContext { } func (c *UDPConn) RunDiscoMessageSendLoop(peerID peer.ID, addr *net.UDPAddr) { - defer slog.Debug("[UDP] DiscoPingExit", "peer", peerID, "addr", addr) + defer slog.Debug("[UDP] DiscoExit", "peer", peerID, "addr", addr) c.discoPing(peerID, addr) interval := defaultDiscoConfig.ChallengesInitialInterval + time.Duration(rand.Intn(100)*int(time.Millisecond)) - for i := 0; i <= defaultDiscoConfig.ChallengesRetry; i++ { + for i := 0; i < defaultDiscoConfig.ChallengesRetry; i++ { time.Sleep(interval) select { case <-c.closedSig: diff --git a/p2p/conn.go b/p2p/conn.go index 0c0c5d5..405395f 100644 --- a/p2p/conn.go +++ b/p2p/conn.go @@ -211,16 +211,16 @@ func (c *PeerPacketConn) runControlEventLoop(wsConn *disco.WSConn, udpConn *disc if !ok { return } - go func(e *disco.PeerUDPAddrEvent) { + go func() { for i := 0; i < 3; i++ { - err := wsConn.WriteTo([]byte(e.Addr.String()), e.PeerID, peer.CONTROL_NEW_PEER_UDP_ADDR) + err := wsConn.WriteTo([]byte(sendUDPAddr.Addr.String()), sendUDPAddr.PeerID, peer.CONTROL_NEW_PEER_UDP_ADDR) if err == nil { - slog.Debug("ListenUDP", "addr", e.Addr) + slog.Debug("ListenUDP", "addr", sendUDPAddr.Addr, "for", sendUDPAddr.PeerID) break } time.Sleep(200 * time.Millisecond) } - }(sendUDPAddr) + }() case _, ok := <-udpConn.NetworkChangedEvents(): if !ok { return