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 withmaster
(if you do - rebase it please)
What are the relevant issue numbers?
None.