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

[flagd] possible data race #652

Open
tylerwilliams opened this issue Mar 24, 2025 · 0 comments
Open

[flagd] possible data race #652

tylerwilliams opened this issue Mar 24, 2025 · 0 comments

Comments

@tylerwilliams
Copy link

I'm attempting to use flagd in-process with a static config file as part of a unit test, but seeing a data race when running with the race detector. Here's my usage: link

And below is the race.

Very good chance I'm 'holding it wrong' -- please let me know if so :)

(And thanks for all your work on this stuff)

==================
WARNING: DATA RACE
Write at 0x00c0001c7e30 by goroutine 295:
  runtime.mapassign()
      GOROOT/src/internal/runtime/maps/runtime_swiss.go:191 +0x0
  github.com/open-feature/flagd/core/pkg/store.(*State).DeleteFlags()
      external/com_github_open_feature_flagd_core/pkg/store/flags.go:201 +0x171
  github.com/open-feature/flagd/core/pkg/evaluator.(*JSON).SetState()
      external/com_github_open_feature_flagd_core/pkg/evaluator/json.go:131 +0xaa4
  github.com/open-feature/go-sdk-contrib/providers/flagd/pkg/service/in_process.(*InProcess).Init.func2()
      external/com_github_open_feature_go_sdk_contrib_providers_flagd/pkg/service/in_process/service.go:105 +0x2b8

Previous read at 0x00c0001c7e30 by goroutine 292:
  runtime.mapIterStart()
      GOROOT/src/runtime/map_swiss.go:165 +0x0
  github.com/open-feature/flagd/core/pkg/store.(*State).getMetadata()
      external/com_github_open_feature_flagd_core/pkg/store/flags.go:332 +0x8d
  github.com/open-feature/flagd/core/pkg/store.(*State).Get()
      external/com_github_open_feature_flagd_core/pkg/store/flags.go:70 +0x104
  github.com/open-feature/flagd/core/pkg/evaluator.(*Resolver).evaluateVariant()
      external/com_github_open_feature_flagd_core/pkg/evaluator/json.go:318 +0xdc
  github.com/open-feature/flagd/core/pkg/evaluator.(*Resolver).evaluateVariant-fm()
      <autogenerated>:1 +0xb8
  github.com/open-feature/flagd/core/pkg/evaluator.resolve[go.shape.bool]()
      external/com_github_open_feature_flagd_core/pkg/evaluator/json.go:300 +0xb7
  github.com/open-feature/flagd/core/pkg/evaluator.(*Resolver).ResolveBooleanValue()
      external/com_github_open_feature_flagd_core/pkg/evaluator/json.go:216 +0x2e4
  github.com/open-feature/go-sdk-contrib/providers/flagd/pkg/service/in_process.(*InProcess).ResolveBoolean()
      external/com_github_open_feature_go_sdk_contrib_providers_flagd/pkg/service/in_process/service.go:141 +0xe8
  github.com/open-feature/go-sdk-contrib/providers/flagd/pkg.(*Provider).BooleanEvaluation()
      external/com_github_open_feature_go_sdk_contrib_providers_flagd/pkg/provider.go:174 +0xda
  github.com/open-feature/go-sdk/openfeature.(*Client).evaluate()
      external/com_github_open_feature_go_sdk/openfeature/client.go:746 +0x12ea
  github.com/open-feature/go-sdk/openfeature.(*Client).BooleanValueDetails()
      external/com_github_open_feature_go_sdk/openfeature/client.go:392 +0x304
  github.com/open-feature/go-sdk/openfeature.(*Client).BooleanValue()
      external/com_github_open_feature_go_sdk/openfeature/client.go:299 +0x126
  github.com/open-feature/go-sdk/openfeature.(*Client).Boolean()
      external/com_github_open_feature_go_sdk/openfeature/client.go:582 +0x11a
  github.com/buildbuddy-io/buildbuddy/enterprise/server/experiments.(*FlagProvider).Boolean()
      enterprise/server/experiments/experiments.go:130 +0x17
  enterprise/server/experiments/experiments_test_test.TestSelection()
      enterprise/server/experiments/experiments_test.go:147 +0x5de
  testing.tRunner()
      GOROOT/src/testing/testing.go:1792 +0x225
  testing.(*T).Run.gowrap1()
      GOROOT/src/testing/testing.go:1851 +0x44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant