open-feature / spec

OpenFeature specification
https://openfeature.dev
Apache License 2.0
595 stars 35 forks source link

[Static-context Paradigm] How to handle errors in `on context changed` #214

Open toddbaert opened 8 months ago

toddbaert commented 8 months ago

In static-context-paradigm (aka client paradigm), the provider context-changed handler runs to help reconcile the new global context with the provider's state (and in many cases the underlying SDK's state). This likely involves doing some kind of conversion of the context. It's reasonable for this function to throw an error, or otherwise signal an abnormal termination.

We haven't defined how this should be handled. I see the following options:

[!NOTE]
I don't believe this is relevant to dynamic-context aka server-side SDKs and providers, which do this sort of conversion within the evaluation flow.

cc @jonathannorris @moredip @lukas-reining @beeme1mr @fabriziodemaria @vahidlazio @thomaspoignant @kinyoklion

Kavindu-Dodan commented 8 months ago

I also agree that this does not apply to dynamic-context usage.

For static context, given context change is an important event, I am in favor of the throw/indicate error approach. I do not think SDK should enforce a state transition as the decision of such change is up to provider implementation.

thomaspoignant commented 3 months ago

@toddbaert I'll bring back this conversation since this is a similar discussion than the one we have in the implementation of the OFREP provider here https://github.com/open-feature/js-sdk-contrib/pull/776#discussion_r1546376895.

In my case, we have received a 429 that asks to retry later, but before the retry date we have a change in the context. In such case, my implementation keeps the provider in error and will not try to call the flag management system, but that puts the provider in a state where it does not react to a context change (even if he will eventually do it with the polling mechanism),

But the setContext will silently do nothing on the moment. Is this what we want in such case?