mirror of https://github.com/waku-org/nwaku.git
Make maximum connections configurable (#731)
This commit is contained in:
parent
83f71ae905
commit
165e235158
|
@ -13,6 +13,7 @@ This release contains the following:
|
||||||
- GossipSub [prune backoff period](https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.1.md#prune-backoff-and-peer-exchange) is now the recommended 1 minute
|
- GossipSub [prune backoff period](https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.1.md#prune-backoff-and-peer-exchange) is now the recommended 1 minute
|
||||||
- Bridge now uses content topic format according to [23/WAKU2-TOPICS](https://rfc.vac.dev/spec/23/)
|
- Bridge now uses content topic format according to [23/WAKU2-TOPICS](https://rfc.vac.dev/spec/23/)
|
||||||
- Better internal differentiation between local and remote peer info
|
- Better internal differentiation between local and remote peer info
|
||||||
|
- Maximum number of libp2p connections is now configurable
|
||||||
|
|
||||||
#### General refactoring
|
#### General refactoring
|
||||||
|
|
||||||
|
|
|
@ -834,4 +834,44 @@ procSuite "WakuNode":
|
||||||
responseCount == 2
|
responseCount == 2
|
||||||
|
|
||||||
await node1.stop()
|
await node1.stop()
|
||||||
await node2.stop()
|
await node2.stop()
|
||||||
|
|
||||||
|
asyncTest "Maximum connections can be configured":
|
||||||
|
let
|
||||||
|
maxConnections = 2
|
||||||
|
nodeKey1 = crypto.PrivateKey.random(Secp256k1, rng[])[]
|
||||||
|
node1 = WakuNode.new(nodeKey1, ValidIpAddress.init("0.0.0.0"),
|
||||||
|
Port(60010), maxConnections = maxConnections)
|
||||||
|
nodeKey2 = crypto.PrivateKey.random(Secp256k1, rng[])[]
|
||||||
|
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"),
|
||||||
|
Port(60012))
|
||||||
|
nodeKey3 = crypto.PrivateKey.random(Secp256k1, rng[])[]
|
||||||
|
node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"),
|
||||||
|
Port(60013))
|
||||||
|
|
||||||
|
check:
|
||||||
|
# Sanity check, to verify config was applied
|
||||||
|
node1.switch.connManager.inSema.size == maxConnections
|
||||||
|
|
||||||
|
# Node with connection limit set to 1
|
||||||
|
await node1.start()
|
||||||
|
node1.mountRelay()
|
||||||
|
|
||||||
|
# Remote node 1
|
||||||
|
await node2.start()
|
||||||
|
node2.mountRelay()
|
||||||
|
|
||||||
|
# Remote node 2
|
||||||
|
await node3.start()
|
||||||
|
node3.mountRelay()
|
||||||
|
|
||||||
|
discard await node1.peerManager.dialPeer(node2.peerInfo.toRemotePeerInfo(), WakuRelayCodec)
|
||||||
|
await sleepAsync(3.seconds)
|
||||||
|
discard await node1.peerManager.dialPeer(node3.peerInfo.toRemotePeerInfo(), WakuRelayCodec)
|
||||||
|
|
||||||
|
check:
|
||||||
|
# Verify that only the first connection succeeded
|
||||||
|
node1.switch.isConnected(node2.peerInfo.peerId)
|
||||||
|
node1.switch.isConnected(node3.peerInfo.peerId) == false
|
||||||
|
|
||||||
|
await allFutures([node1.stop(), node2.stop(), node3.stop()])
|
||||||
|
|
|
@ -41,6 +41,11 @@ type
|
||||||
desc: "Specify method to use for determining public address. " &
|
desc: "Specify method to use for determining public address. " &
|
||||||
"Must be one of: any, none, upnp, pmp, extip:<IP>."
|
"Must be one of: any, none, upnp, pmp, extip:<IP>."
|
||||||
defaultValue: "any" }: string
|
defaultValue: "any" }: string
|
||||||
|
|
||||||
|
maxConnections* {.
|
||||||
|
desc: "Maximum allowed number of libp2p connections."
|
||||||
|
defaultValue: 50
|
||||||
|
name: "max-connections" }: uint16
|
||||||
|
|
||||||
## Persistence config
|
## Persistence config
|
||||||
|
|
||||||
|
|
|
@ -128,7 +128,8 @@ template tcpEndPoint(address, port): auto =
|
||||||
proc new*(T: type WakuNode, nodeKey: crypto.PrivateKey,
|
proc new*(T: type WakuNode, nodeKey: crypto.PrivateKey,
|
||||||
bindIp: ValidIpAddress, bindPort: Port,
|
bindIp: ValidIpAddress, bindPort: Port,
|
||||||
extIp = none[ValidIpAddress](), extPort = none[Port](),
|
extIp = none[ValidIpAddress](), extPort = none[Port](),
|
||||||
peerStorage: PeerStorage = nil): T
|
peerStorage: PeerStorage = nil,
|
||||||
|
maxConnections = builders.MaxConnections): T
|
||||||
{.raises: [Defect, LPError].} =
|
{.raises: [Defect, LPError].} =
|
||||||
## Creates a Waku Node.
|
## Creates a Waku Node.
|
||||||
##
|
##
|
||||||
|
@ -153,15 +154,13 @@ proc new*(T: type WakuNode, nodeKey: crypto.PrivateKey,
|
||||||
for multiaddr in announcedAddresses:
|
for multiaddr in announcedAddresses:
|
||||||
peerInfo.addrs.add(multiaddr) # Announced addresses in index > 0
|
peerInfo.addrs.add(multiaddr) # Announced addresses in index > 0
|
||||||
|
|
||||||
var switch = newStandardSwitch(some(nodekey), hostAddress,
|
var switch = newStandardSwitch(
|
||||||
transportFlags = {ServerFlags.ReuseAddr}, rng = rng)
|
some(nodekey),
|
||||||
# TODO Untested - verify behavior after switch interface change
|
hostAddress,
|
||||||
# More like this:
|
transportFlags = {ServerFlags.ReuseAddr},
|
||||||
# let pubsub = GossipSub.init(
|
rng = rng,
|
||||||
# switch = switch,
|
maxConnections = maxConnections)
|
||||||
# msgIdProvider = msgIdProvider,
|
|
||||||
# triggerSelf = true, sign = false,
|
|
||||||
# verifySignature = false).PubSub
|
|
||||||
let wakuNode = WakuNode(
|
let wakuNode = WakuNode(
|
||||||
peerManager: PeerManager.new(switch, peerStorage),
|
peerManager: PeerManager.new(switch, peerStorage),
|
||||||
switch: switch,
|
switch: switch,
|
||||||
|
@ -841,7 +840,8 @@ when isMainModule:
|
||||||
node = WakuNode.new(conf.nodekey,
|
node = WakuNode.new(conf.nodekey,
|
||||||
conf.listenAddress, Port(uint16(conf.tcpPort) + conf.portsShift),
|
conf.listenAddress, Port(uint16(conf.tcpPort) + conf.portsShift),
|
||||||
extIp, extPort,
|
extIp, extPort,
|
||||||
pStorage)
|
pStorage,
|
||||||
|
conf.maxConnections.int)
|
||||||
|
|
||||||
ok(node)
|
ok(node)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue