Skip to content
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

Cleanup data race associated with workerID var #11922

Merged
merged 2 commits into from
Feb 12, 2024

Conversation

paul1r
Copy link
Collaborator

@paul1r paul1r commented Feb 12, 2024

What this PR does / why we need it:
A data race existed with the workerID variable, as it could be modified by multiple goroutines.

Relates to: #8586

Before fix:

go test -count=1 -race ./pkg/querier/worker
==================
WARNING: DATA RACE
Read at 0x00c000494108 by goroutine 229:
  github.com/grafana/loki/pkg/querier/worker.(*processorManager).concurrency.func1()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/processor_manager.go:81 +0x118

Previous write at 0x00c000494108 by goroutine 222:
  github.com/grafana/loki/pkg/querier/worker.(*processorManager).concurrency()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/processor_manager.go:70 +0x108
  github.com/grafana/loki/pkg/querier/worker.(*querierWorker).resetConcurrency()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/worker.go:267 +0x10c
  github.com/grafana/loki/pkg/querier/worker.(*querierWorker).AddressAdded()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/worker.go:219 +0x868
  github.com/grafana/loki/pkg/querier/worker.TestResetConcurrency.func1()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/worker_test.go:64 +0x1c8
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.21.6/libexec/src/testing/testing.go:1595 +0x1b0
  testing.(*T).Run.func1()
      /opt/homebrew/Cellar/go/1.21.6/libexec/src/testing/testing.go:1648 +0x40

Goroutine 229 (running) created at:
  github.com/grafana/loki/pkg/querier/worker.(*processorManager).concurrency()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/processor_manager.go:75 +0xcc
  github.com/grafana/loki/pkg/querier/worker.(*querierWorker).resetConcurrency()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/worker.go:267 +0x10c
  github.com/grafana/loki/pkg/querier/worker.(*querierWorker).AddressAdded()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/worker.go:219 +0x868
  github.com/grafana/loki/pkg/querier/worker.TestResetConcurrency.func1()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/worker_test.go:64 +0x1c8
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.21.6/libexec/src/testing/testing.go:1595 +0x1b0
  testing.(*T).Run.func1()
      /opt/homebrew/Cellar/go/1.21.6/libexec/src/testing/testing.go:1648 +0x40

Goroutine 222 (running) created at:
  testing.(*T).Run()
      /opt/homebrew/Cellar/go/1.21.6/libexec/src/testing/testing.go:1648 +0x5e8
  github.com/grafana/loki/pkg/querier/worker.TestResetConcurrency()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/worker_test.go:52 +0x1b0
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.21.6/libexec/src/testing/testing.go:1595 +0x1b0
  testing.(*T).Run.func1()
      /opt/homebrew/Cellar/go/1.21.6/libexec/src/testing/testing.go:1648 +0x40
==================
--- FAIL: TestResetConcurrency (0.02s)
    --- FAIL: TestResetConcurrency/concurrency_is_correct_when_numTargets_does_not_divide_evenly_into_maxConcurrent (0.01s)
        testing.go:1465: race detected during execution of test
    testing.go:1465: race detected during execution of test
FAIL
FAIL	github.com/grafana/loki/pkg/querier/worker	4.626s
FAIL

--

After fix:

go clean -testcache
go test -count=1 -race ./pkg/querier/worker
ok  	github.com/grafana/loki/pkg/querier/worker	6.034s

Which issue(s) this PR fixes:
Fixes #

Special notes for your reviewer:

Checklist

  • Reviewed the CONTRIBUTING.md guide (required)
  • Documentation added
  • Tests updated
  • CHANGELOG.md updated
    • If the change is worth mentioning in the release notes, add add-to-release-notes label
  • Changes that require user attention or interaction to upgrade are documented in docs/sources/setup/upgrade/_index.md
  • For Helm chart changes bump the Helm chart version in production/helm/loki/Chart.yaml and update production/helm/loki/CHANGELOG.md and production/helm/loki/README.md. Example PR
  • If the change is deprecating or removing a configuration option, update the deprecated-config.yaml and deleted-config.yaml files respectively in the tools/deprecated-config-checker directory. Example PR

@paul1r paul1r requested a review from a team as a code owner February 12, 2024 21:04
@paul1r paul1r merged commit c277158 into main Feb 12, 2024
10 checks passed
@paul1r paul1r deleted the paul1r/processor_manager_data_race branch February 12, 2024 23:52
rhnasc pushed a commit to inloco/loki that referenced this pull request Apr 12, 2024
**What this PR does / why we need it**:
A data race existed with the workerID variable, as it could be modified
by multiple goroutines.

Relates to: grafana#8586
--

Before fix:
```
go test -count=1 -race ./pkg/querier/worker
==================
WARNING: DATA RACE
Read at 0x00c000494108 by goroutine 229:
  github.com/grafana/loki/pkg/querier/worker.(*processorManager).concurrency.func1()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/processor_manager.go:81 +0x118

Previous write at 0x00c000494108 by goroutine 222:
  github.com/grafana/loki/pkg/querier/worker.(*processorManager).concurrency()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/processor_manager.go:70 +0x108
  github.com/grafana/loki/pkg/querier/worker.(*querierWorker).resetConcurrency()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/worker.go:267 +0x10c
  github.com/grafana/loki/pkg/querier/worker.(*querierWorker).AddressAdded()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/worker.go:219 +0x868
  github.com/grafana/loki/pkg/querier/worker.TestResetConcurrency.func1()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/worker_test.go:64 +0x1c8
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.21.6/libexec/src/testing/testing.go:1595 +0x1b0
  testing.(*T).Run.func1()
      /opt/homebrew/Cellar/go/1.21.6/libexec/src/testing/testing.go:1648 +0x40

Goroutine 229 (running) created at:
  github.com/grafana/loki/pkg/querier/worker.(*processorManager).concurrency()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/processor_manager.go:75 +0xcc
  github.com/grafana/loki/pkg/querier/worker.(*querierWorker).resetConcurrency()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/worker.go:267 +0x10c
  github.com/grafana/loki/pkg/querier/worker.(*querierWorker).AddressAdded()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/worker.go:219 +0x868
  github.com/grafana/loki/pkg/querier/worker.TestResetConcurrency.func1()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/worker_test.go:64 +0x1c8
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.21.6/libexec/src/testing/testing.go:1595 +0x1b0
  testing.(*T).Run.func1()
      /opt/homebrew/Cellar/go/1.21.6/libexec/src/testing/testing.go:1648 +0x40

Goroutine 222 (running) created at:
  testing.(*T).Run()
      /opt/homebrew/Cellar/go/1.21.6/libexec/src/testing/testing.go:1648 +0x5e8
  github.com/grafana/loki/pkg/querier/worker.TestResetConcurrency()
      /Users/progers/dev/src/github.com/grafana/loki/pkg/querier/worker/worker_test.go:52 +0x1b0
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.21.6/libexec/src/testing/testing.go:1595 +0x1b0
  testing.(*T).Run.func1()
      /opt/homebrew/Cellar/go/1.21.6/libexec/src/testing/testing.go:1648 +0x40
==================
--- FAIL: TestResetConcurrency (0.02s)
    --- FAIL: TestResetConcurrency/concurrency_is_correct_when_numTargets_does_not_divide_evenly_into_maxConcurrent (0.01s)
        testing.go:1465: race detected during execution of test
    testing.go:1465: race detected during execution of test
FAIL
FAIL	github.com/grafana/loki/pkg/querier/worker	4.626s
FAIL
```

--

After fix:

```
go clean -testcache
go test -count=1 -race ./pkg/querier/worker
ok  	github.com/grafana/loki/pkg/querier/worker	6.034s
```
**Which issue(s) this PR fixes**:
Fixes #<issue number>

**Special notes for your reviewer**:

**Checklist**
- [ ] Reviewed the
[`CONTRIBUTING.md`](https://github.com/grafana/loki/blob/main/CONTRIBUTING.md)
guide (**required**)
- [ ] Documentation added
- [ ] Tests updated
- [ ] `CHANGELOG.md` updated
- [ ] If the change is worth mentioning in the release notes, add
`add-to-release-notes` label
- [ ] Changes that require user attention or interaction to upgrade are
documented in `docs/sources/setup/upgrade/_index.md`
- [ ] For Helm chart changes bump the Helm chart version in
`production/helm/loki/Chart.yaml` and update
`production/helm/loki/CHANGELOG.md` and
`production/helm/loki/README.md`. [Example
PR](grafana@d10549e)
- [ ] If the change is deprecating or removing a configuration option,
update the `deprecated-config.yaml` and `deleted-config.yaml` files
respectively in the `tools/deprecated-config-checker` directory.
[Example
PR](grafana@0d4416a)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants