tests: make log monitor as common helper

It's followup of #15667.

This patch is to use zaptest/observer as base to provide a similar
function to pkg/expect.Expect.

The test env

```bash
11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz
mkdir /sys/fs/cgroup/etcd-followup-15667
echo 0-2 | tee /sys/fs/cgroup/etcd-followup-15667/cpuset.cpus # three cores
```

Before change:

* memory.peak: ~ 681 MiB
* Elapsed (wall clock) time (h:mm:ss or m:ss): 6:14.04

After change:

* memory.peak: ~ 671 MiB
* Elapsed (wall clock) time (h:mm:ss or m:ss): 6:13.07

Based on the test result, I think it's safe to be enabled by default.

Signed-off-by: Wei Fu <fuweid89@gmail.com>
This commit is contained in:
Wei Fu
2023-04-14 18:48:24 +08:00
parent 22f3e50ada
commit 50aa00b203
4 changed files with 221 additions and 110 deletions

View File

@ -581,6 +581,8 @@ type Member struct {
Closed bool
GrpcServerRecorder *grpc_testing.GrpcRecorder
LogObserver *testutils.LogObserver
}
func (m *Member) GRPCURL() string { return m.GrpcURL }
@ -730,7 +732,9 @@ func MustNewMember(t testutil.TB, mcfg MemberConfig) *Member {
}
m.V2Deprecation = config.V2_DEPR_DEFAULT
m.GrpcServerRecorder = &grpc_testing.GrpcRecorder{}
m.Logger = memberLogger(t, mcfg.Name)
m.Logger, m.LogObserver = memberLogger(t, mcfg.Name)
m.StrictReconfigCheck = !mcfg.DisableStrictReconfigCheck
if err := m.listenGRPC(); err != nil {
t.Fatalf("listenGRPC FAILED: %v", err)
@ -743,14 +747,23 @@ func MustNewMember(t testutil.TB, mcfg MemberConfig) *Member {
return m
}
func memberLogger(t testutil.TB, name string) *zap.Logger {
func memberLogger(t testutil.TB, name string) (*zap.Logger, *testutils.LogObserver) {
level := zapcore.InfoLevel
if os.Getenv("CLUSTER_DEBUG") != "" {
level = zapcore.DebugLevel
}
options := zaptest.WrapOptions(zap.Fields(zap.String("member", name)))
return zaptest.NewLogger(t, zaptest.Level(level), options).Named(name)
obCore, logOb := testutils.NewLogObserver(level)
options := zaptest.WrapOptions(
zap.Fields(zap.String("member", name)),
// copy logged entities to log observer
zap.WrapCore(func(oldCore zapcore.Core) zapcore.Core {
return zapcore.NewTee(oldCore, obCore)
}),
)
return zaptest.NewLogger(t, zaptest.Level(level), options).Named(name), logOb
}
// listenGRPC starts a grpc server over a unix domain socket on the member
@ -934,7 +947,7 @@ func (m *Member) Clone(t testutil.TB) *Member {
mm.ElectionTicks = m.ElectionTicks
mm.PeerTLSInfo = m.PeerTLSInfo
mm.ClientTLSInfo = m.ClientTLSInfo
mm.Logger = memberLogger(t, mm.Name+"c")
mm.Logger, mm.LogObserver = memberLogger(t, mm.Name+"c")
return mm
}