open-feature / open-feature/go-sdk

[BUG] Provider lifecycle calls may occur in invalid order

Open
#495 0 comments 1 reaction 0 assignees View on GitHub
bug
Dominant language
Go
Stars
249
Forks
61
Avg merge
2d 3h
Merged PRs (30d)
25

Description

### Observed behavior

In some situations, provider Init may be called after openfeature.Shutdown() call. Additionally, a provider that was not received `Init` call may got a `Shutdown` call.

### Expected Behavior

_No response_

### Steps to reproduce

```go
func TestProviderInitShutdown(t *testing.T) {
p := &ttprovider{t: t}
err := openfeature.SetProvider(p)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
openfeature.Shutdown()
time.Sleep(time.Second)
}

var _ openfeature.StateHandler = (*ttprovider)(nil)

type ttprovider struct {
openfeature.NoopProvider
halted atomic.Bool
t testing.TB
}

func (a *ttprovider) Init(openfeature.EvaluationContext) error {
if a.halted.Load() {
a.t.Fatal("unexpected init call after Shutdown")
}
return nil
}

func (a *ttprovider) Shutdown() {
if a.halted.CompareAndSwap(false, true) {
a.t.Log("Shutdown was called")
}
}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.