disco: a better default disco parameters

This commit is contained in:
rkonfj 2024-03-31 13:25:59 +08:00
parent a623b62b93
commit 6dbae0397f
4 changed files with 11 additions and 11 deletions

View File

@ -46,7 +46,7 @@ func init() {
Cmd.Flags().StringSlice("peer", []string{}, "specify peers instead of auto-discovery (pg://<peerID>?alias1=<ipv4>&alias2=<ipv6>)")
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")

View File

@ -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()

View File

@ -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:

View File

@ -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