github.com/MetalBlockchain/metalgo@v1.11.9/utils/constants/networking.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package constants 5 6 import ( 7 "time" 8 9 "github.com/MetalBlockchain/metalgo/utils/compression" 10 "github.com/MetalBlockchain/metalgo/utils/units" 11 ) 12 13 const ( 14 // The network must be "tcp", "tcp4", "tcp6", "unix" or "unixpacket". 15 NetworkType = "tcp" 16 17 DefaultMaxMessageSize = 2 * units.MiB 18 DefaultPingPongTimeout = 30 * time.Second 19 DefaultPingFrequency = 3 * DefaultPingPongTimeout / 4 20 DefaultByteSliceCap = 128 21 22 MaxContainersLen = int(4 * DefaultMaxMessageSize / 5) 23 24 DefaultNetworkPeerListNumValidatorIPs = 15 25 DefaultNetworkPeerListValidatorGossipSize = 20 26 DefaultNetworkPeerListNonValidatorGossipSize = 0 27 DefaultNetworkPeerListPeersGossipSize = 10 28 DefaultNetworkPeerListGossipFreq = time.Minute 29 DefaultNetworkPeerListPullGossipFreq = 2 * time.Second 30 DefaultNetworkPeerListBloomResetFreq = time.Minute 31 32 // Inbound Connection Throttling 33 DefaultInboundConnUpgradeThrottlerCooldown = 10 * time.Second 34 DefaultInboundThrottlerMaxConnsPerSec = 256 35 36 // Outbound Connection Throttling 37 DefaultOutboundConnectionThrottlingRps = 50 38 DefaultOutboundConnectionTimeout = 30 * time.Second 39 40 // Timeouts 41 DefaultNetworkInitialTimeout = 5 * time.Second 42 DefaultNetworkMinimumTimeout = 2 * time.Second 43 DefaultNetworkMaximumTimeout = 10 * time.Second 44 DefaultNetworkMaximumInboundTimeout = 10 * time.Second 45 DefaultNetworkTimeoutHalflife = 5 * time.Minute 46 DefaultNetworkTimeoutCoefficient = 2 47 DefaultNetworkReadHandshakeTimeout = 15 * time.Second 48 49 DefaultNetworkCompressionType = compression.TypeZstd 50 DefaultNetworkMaxClockDifference = time.Minute 51 DefaultNetworkRequireValidatorToConnect = false 52 DefaultNetworkPeerReadBufferSize = 8 * units.KiB 53 DefaultNetworkPeerWriteBufferSize = 8 * units.KiB 54 55 DefaultNetworkTCPProxyEnabled = false 56 57 // The PROXY protocol specification recommends setting this value to be at 58 // least 3 seconds to cover a TCP retransmit. 59 // Ref: https://www.haproxy.org/download/2.3/doc/proxy-protocol.txt 60 // Specifying a timeout of 0 will actually result in a timeout of 200ms, but 61 // a timeout of 0 should generally not be provided. 62 DefaultNetworkTCPProxyReadTimeout = 3 * time.Second 63 64 // Benchlist 65 DefaultBenchlistFailThreshold = 10 66 DefaultBenchlistDuration = 15 * time.Minute 67 DefaultBenchlistMinFailingDuration = 2*time.Minute + 30*time.Second 68 69 // Router 70 DefaultConsensusAppConcurrency = 2 71 DefaultConsensusShutdownTimeout = time.Minute 72 DefaultFrontierPollFrequency = 100 * time.Millisecond 73 74 // Inbound Throttling 75 DefaultInboundThrottlerAtLargeAllocSize = 6 * units.MiB 76 DefaultInboundThrottlerVdrAllocSize = 32 * units.MiB 77 DefaultInboundThrottlerNodeMaxAtLargeBytes = DefaultMaxMessageSize 78 DefaultInboundThrottlerMaxProcessingMsgsPerNode = 1024 79 DefaultInboundThrottlerBandwidthRefillRate = 512 * units.KiB 80 DefaultInboundThrottlerBandwidthMaxBurstSize = DefaultMaxMessageSize 81 DefaultInboundThrottlerCPUMaxRecheckDelay = 5 * time.Second 82 DefaultInboundThrottlerDiskMaxRecheckDelay = 5 * time.Second 83 MinInboundThrottlerMaxRecheckDelay = time.Millisecond 84 85 // Outbound Throttling 86 DefaultOutboundThrottlerAtLargeAllocSize = 32 * units.MiB 87 DefaultOutboundThrottlerVdrAllocSize = 32 * units.MiB 88 DefaultOutboundThrottlerNodeMaxAtLargeBytes = DefaultMaxMessageSize 89 90 // Network Health 91 DefaultHealthCheckAveragerHalflife = 10 * time.Second 92 93 DefaultNetworkHealthMaxTimeSinceMsgSent = time.Minute 94 DefaultNetworkHealthMaxTimeSinceMsgReceived = time.Minute 95 DefaultNetworkHealthMaxPortionSendQueueFill = 0.9 96 DefaultNetworkHealthMinPeers = 1 97 DefaultNetworkHealthMaxSendFailRate = .9 98 99 // Metrics 100 DefaultUptimeMetricFreq = 30 * time.Second 101 102 // Delays 103 DefaultNetworkInitialReconnectDelay = time.Second 104 DefaultNetworkMaxReconnectDelay = time.Minute 105 )