Forum | Documentation | Website | Blog

Skip to content
Snippets Groups Projects
user avatar
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
  - [:heavy_check_mark:] All builds are passing
- [:heavy_check_mark:] Branch has no merge conflicts with `master` (if you do - rebase it please)

## What are the relevant issue numbers?

None.

See merge request !352
2dc94678