Skip to content

[flagd] possible data race #652

Open
@tylerwilliams

Description

@tylerwilliams

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions