Skip to content

Commit

Permalink
cmd/relay: fix connection limits (ObolNetwork#1805)
Browse files Browse the repository at this point in the history
Fixes issue with relay limits not being applied correctly getting stuck at 256 connections.

category: bug
ticket: none
  • Loading branch information
corverroos authored Feb 14, 2023
1 parent bc73565 commit fbfbfdf
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 0 deletions.
53 changes: 53 additions & 0 deletions app/app_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"testing"
"time"

k1 "github.com/decred/dcrd/dcrec/secp256k1/v4"
"github.com/libp2p/go-libp2p"
"github.com/libp2p/go-libp2p/core/host"
"github.com/libp2p/go-libp2p/core/peer"
Expand Down Expand Up @@ -398,6 +399,58 @@ func TestInfoSync(t *testing.T) {
require.NoError(t, err)
}

func TestRelayConnections(t *testing.T) {
ctx := context.Background()

relayAddr, relayErr := startRelay(ctx, t)

relays, err := p2p.NewRelays(ctx, []string{relayAddr}, "")
require.NoError(t, err)

relay, ok := relays[0].Peer()
require.True(t, ok)

const totalOK = 1024
okErrs := make(chan error, totalOK)
for i := 0; i < totalOK; i++ {
privKey, err := k1.GeneratePrivateKey()
require.NoError(t, err)

tcpNode, err := p2p.NewTCPNode(ctx, p2p.Config{}, privKey, p2p.NewOpenGater())
require.NoError(t, err)

go func(tcpNode host.Host) {
okErrs <- tcpNode.Connect(ctx, peer.AddrInfo{
ID: relay.ID,
Addrs: relay.Addrs,
})
}(tcpNode)
}

for i := 0; i < totalOK; i++ {
select {
case err := <-okErrs:
require.NoError(t, err, i)
case err := <-relayErr:
testutil.SkipIfBindErr(t, err)
require.NoError(t, err)
}
}

// One more should fail
privKey, err := k1.GeneratePrivateKey()
require.NoError(t, err)

tcpNode, err := p2p.NewTCPNode(ctx, p2p.Config{}, privKey, p2p.NewOpenGater())
require.NoError(t, err)

err = tcpNode.Connect(ctx, peer.AddrInfo{
ID: relay.ID,
Addrs: relay.Addrs,
})
require.Error(t, err)
}

// priorityAsserter asserts that all nodes resolved the same priorities.
type priorityAsserter struct {
asserter
Expand Down
1 change: 1 addition & 0 deletions cmd/relay/p2p.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ func startP2P(ctx context.Context, config Config, key *k1.PrivateKey, reporter m
// Increase resource limits
limiter := rcmgr.DefaultLimits
limiter.SystemBaseLimit.ConnsInbound = config.MaxConns
limiter.SystemBaseLimit.Conns = config.MaxConns
limiter.SystemBaseLimit.FD = config.MaxConns
limiter.TransientBaseLimit = limiter.SystemBaseLimit

Expand Down

0 comments on commit fbfbfdf

Please sign in to comment.