-
-
Notifications
You must be signed in to change notification settings - Fork 4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
log filter generates race alarm #2968
Comments
A minimal reproduce: package main
import (
"io"
"sync"
"github.com/go-kratos/kratos/v2/log"
)
func main() {
l := log.With(log.NewStdLogger(io.Discard))
l = log.NewFilter(l)
var wg sync.WaitGroup
for i := 0; i < 3; i++ {
wg.Add(1)
go func() { defer wg.Done(); l.Log(log.LevelInfo, "a") }()
}
wg.Wait()
} output: $ go run -race .
==================
WARNING: DATA RACE
Write at 0x00c000108070 by goroutine 8:
github.com/go-kratos/kratos/v2/log.(*Filter).Log()
/Users/kvii/go/pkg/mod/github.com/go-kratos/kratos/v2@v2.7.0/log/filter.go:74 +0xcc
main.main.func1()
/Users/kvii/Documents/workspace/qs/go/playground/main.go:17 +0xd8
Previous write at 0x00c000108070 by goroutine 6:
github.com/go-kratos/kratos/v2/log.(*Filter).Log()
/Users/kvii/go/pkg/mod/github.com/go-kratos/kratos/v2@v2.7.0/log/filter.go:74 +0xcc
main.main.func1()
/Users/kvii/Documents/workspace/qs/go/playground/main.go:17 +0xd8
Goroutine 8 (running) created at:
main.main()
/Users/kvii/Documents/workspace/qs/go/playground/main.go:17 +0x144
Goroutine 6 (running) created at:
main.main()
/Users/kvii/Documents/workspace/qs/go/playground/main.go:17 +0x144
==================
Found 1 data race(s)
exit status 66 |
Hi, @chadlwm, I'm helping the Kratos team manage their backlog and am marking this issue as stale. The issue was raised by you regarding a race condition in the log filter of Kratos v2.6.3. User @kvii provided a minimal reproduction of the issue, and you acknowledged it with a thumbs-up reaction. As of now, the issue remains unresolved. Could you please confirm if this issue is still relevant to the latest version of the Kratos repository? If it is, kindly let the Kratos team know by commenting on the issue. Otherwise, feel free to close the issue yourself, or it will be automatically closed in 7 days. Thank you for your understanding and cooperation. |
@shenqidebaozi, could you please assist with the issue raised by @chadlwm regarding the race condition in the log filter of Kratos v2.6.3? User @kvii mentioned that the bug has been fixed at #3069, and @chadlwm is advised to try it with the previous comment and then close the issue. Thank you! |
What happened:
使用log filter时产生race告警
What you expected to happen:
log filter中对ctx的赋值,未添加所,多个go routine访问时会产生竞争
How to reproduce it (as minimally and precisely as possible):
在main.go
logger := log.NewFilter(logger, log.FilterLevel(log.ParseLevel("info")))
在多个server中使用logger:
log.NewHelper(logger)
build with -race
mkdir -p app/ && go build -race --trimpath -v -ldflags "-X main.Version=$(VERSION)" -o ./app/ ./...
启动
./app/xxxxx -conf configs
日志warning:
==================
WARNING: DATA RACE
Write at 0x00c00012a6b0 by goroutine 30:
github.com/go-kratos/kratos/v2/log.(*Filter).Log()
github.com/go-kratos/kratos/v2@v2.6.3/log/filter.go:74 +0x10d
github.com/go-kratos/kratos/v2/log.Infof()
github.com/go-kratos/kratos/v2@v2.6.3/log/global.go:73 +0x189
github.com/go-kratos/kratos/v2/transport/grpc.(*Server).Start()
github.com/go-kratos/kratos/v2@v2.6.3/transport/grpc/server.go:205 +0x104
github.com/go-kratos/kratos/v2.(*App).Run.func2()
github.com/go-kratos/kratos/v2@v2.6.3/app.go:112 +0x81
golang.org/x/sync/errgroup.(*Group).Go.func1()
golang.org/x/sync@v0.3.0/errgroup/errgroup.go:75 +0x82
Previous write at 0x00c00012a6b0 by goroutine 35:
github.com/go-kratos/kratos/v2/log.(*Filter).Log()
github.com/go-kratos/kratos/v2@v2.6.3/log/filter.go:74 +0x10d
github.com/go-kratos/kratos/v2/log.(*logger).Log()
github.com/go-kratos/kratos/v2@v2.6.3/log/log.go:30 +0x242
github.com/go-kratos/kratos/v2/log.(*Helper).Infof()
github.com/go-kratos/kratos/v2@v2.6.3/log/helper.go:96 +0x192
linkage-signal-service/internal/server.(*CS104SingleServer).Start.func1()
xxxxxx/internal/server/cs104_single.go:72 +0x14b
Goroutine 30 (running) created at:
golang.org/x/sync/errgroup.(*Group).Go()
golang.org/x/sync@v0.3.0/errgroup/errgroup.go:72 +0x12e
github.com/go-kratos/kratos/v2.(*App).Run()
github.com/go-kratos/kratos/v2@v2.6.3/app.go:110 +0x319
main.main()
xxxxxx/cmd/xxxxxx/main.go:94 +0xafa
Goroutine 35 (running) created at:
xxxxxx/internal/server.(*CS104SingleServer).Start()
xxxxxx/internal/server/cs104_single.go:68 +0x8e
github.com/go-kratos/kratos/v2.(*App).Run.func2()
github.com/go-kratos/kratos/v2@v2.6.3/app.go:112 +0x81
golang.org/x/sync/errgroup.(*Group).Go.func1()
golang.org/x/sync@v0.3.0/errgroup/errgroup.go:75 +0x82
Anything else we need to know?:
Environment:
kratos -v
): kratos version v2.6.3go version
): go version go1.20.3 linux/amd64cat /etc/os-release
): ubuntu 16.04.7 LTS (Xenial Xerus)The text was updated successfully, but these errors were encountered: