mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-24 03:47:45 +08:00
This periodically logs how many times Resource Manager limits were exceeded. If they aren't exceeded, then nothing is logged. The log levels are at ERROR log level so that they are shown by default. The motivation is so that users know when they have exceeded resource manager limits. To find what is exceeding the limits, they'll need to turn on debug logging and inspect the errors being logged. This could collect the specific limits being reached, but that's more complicated to implement and could result in much longer log messages.
59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package libp2p
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/benbjohnson/clock"
|
|
"github.com/libp2p/go-libp2p-core/network"
|
|
rcmgr "github.com/libp2p/go-libp2p-resource-manager"
|
|
"github.com/stretchr/testify/require"
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zaptest/observer"
|
|
)
|
|
|
|
func TestLoggingResourceManager(t *testing.T) {
|
|
clock := clock.NewMock()
|
|
limiter := rcmgr.NewDefaultLimiter()
|
|
limiter.SystemLimits = limiter.SystemLimits.WithConnLimit(1, 1, 1)
|
|
rm, err := rcmgr.NewResourceManager(limiter)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
oCore, oLogs := observer.New(zap.WarnLevel)
|
|
oLogger := zap.New(oCore)
|
|
lrm := &loggingResourceManager{
|
|
clock: clock,
|
|
logger: oLogger.Sugar(),
|
|
delegate: rm,
|
|
logInterval: 1 * time.Second,
|
|
}
|
|
|
|
// 2 of these should result in resource limit exceeded errors and subsequent log messages
|
|
for i := 0; i < 3; i++ {
|
|
_, _ = lrm.OpenConnection(network.DirInbound, false)
|
|
}
|
|
|
|
// run the logger which will write an entry for those errors
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
lrm.start(ctx)
|
|
clock.Add(3 * time.Second)
|
|
|
|
timer := time.NewTimer(1 * time.Second)
|
|
for {
|
|
select {
|
|
case <-timer.C:
|
|
t.Fatalf("expected logs never arrived")
|
|
default:
|
|
if oLogs.Len() == 0 {
|
|
continue
|
|
}
|
|
require.Equal(t, "Resource limits were exceeded 2 times, consider inspecting logs and raising the resource manager limits.", oLogs.All()[0].Message)
|
|
return
|
|
}
|
|
}
|
|
}
|