Tomasz Maczukin
authored
Fix data races around runner health and build stats ## What does this MR do? It fixes two data races discovered by building with `--race` enabled and running the runner for a while. ``` ================== WARNING: DATA RACE Write at 0x00c4200ba3c0 by goroutine 24: gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*buildsHelper).addBuild() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/builds_helper.go:79 +0x545 gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).processRunner() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:134 +0x70f gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).processRunners() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:156 +0x269 Previous read at 0x00c4200ba3c0 by main goroutine: gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).log() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:59 +0x40 gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).runWait() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:299 +0x3f gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).(gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.runWait)-fm() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:411 +0x41 gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/ayufan/golang-kardianos-service.(*systemd).Run() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/ayufan/golang-kardianos-service/service_systemd_linux.go:138 +0x14a gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).Execute() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:432 +0x412 gitlab.com/gitlab-org/gitlab-ci-multi-runner/common.(Commander).Execute-fm() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/common/command.go:24 +0x50 gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/codegangsta/cli.Command.Run() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/codegangsta/cli/command.go:127 +0xa8f gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/codegangsta/cli.(*App).Run() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/codegangsta/cli/app.go:159 +0xb8e main.main() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/main.go:58 +0x41b Goroutine 24 (running) created at: gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).startWorkers() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:172 +0xc1 ================== ``` ...and: ``` ================== WARNING: DATA RACE Write at 0x00c4200ba440 by main goroutine: gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).runWait() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:302 +0x166 gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).(gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.runWait)-fm() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:411 +0x41 gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/ayufan/golang-kardianos-service.(*systemd).Run() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/ayufan/golang-kardianos-service/service_systemd_linux.go:138 +0x14a gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).Execute() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:432 +0x412 gitlab.com/gitlab-org/gitlab-ci-multi-runner/common.(Commander).Execute-fm() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/common/command.go:24 +0x50 gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/codegangsta/cli.Command.Run() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/codegangsta/cli/command.go:127 +0xa8f gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/codegangsta/cli.(*App).Run() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/codegangsta/cli/app.go:159 +0xb8e main.main() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/main.go:58 +0x41b Previous read at 0x00c4200ba440 by goroutine 20: gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).Run() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:319 +0x427 Goroutine 20 (running) created at: gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).Start() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:248 +0x4dd gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/ayufan/golang-kardianos-service.(*systemd).Run() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/ayufan/golang-kardianos-service/service_systemd_linux.go:129 +0x66 gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).Execute() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:432 +0x412 gitlab.com/gitlab-org/gitlab-ci-multi-runner/common.(Commander).Execute-fm() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/common/command.go:24 +0x50 gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/codegangsta/cli.Command.Run() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/codegangsta/cli/command.go:127 +0xa8f gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/codegangsta/cli.(*App).Run() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/vendor/github.com/codegangsta/cli/app.go:159 +0xb8e main.main() /home/julius/gosrc/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/main.go:58 +0x41b ================== ``` ## Why was this MR needed? These data races may break runner health tracking, as well as the reporting of build queue length. ## Are there points in the code the reviewer needs to double check? None in particular. ## Does this MR meet the acceptance criteria? - [✘] Documentation created/updated - Tests - [✘] Added for this feature/bug - [] All builds are passing - [ ] Branch has no merge conflicts with `master` (if you do - rebase it please) ## What are the relevant issue numbers? None. See merge request !352
Name | Last commit | Last update |
---|---|---|
.. | ||
helpers | ||
builds_helper.go | ||
config.go | ||
config_unix.go | ||
config_windows.go | ||
exec.go | ||
health_helper.go | ||
list.go | ||
multi.go | ||
register.go | ||
service.go | ||
single.go | ||
unregister.go | ||
user_mode_warning.go | ||
verify.go |