Skip to content
This repository has been archived by the owner on Sep 13, 2023. It is now read-only.

Commit

Permalink
adding shutdown method to shutdown the provider. non-suspending conte…
Browse files Browse the repository at this point in the history
…xt set and initialize for setting provider
  • Loading branch information
vahidlazio committed Jul 21, 2023
1 parent 2dc402e commit 62dd83c
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,14 @@ interface FeatureProvider {
val metadata: ProviderMetadata

// Called by OpenFeatureAPI whenever the new Provider is registered
suspend fun initialize(initialContext: EvaluationContext?)
fun initialize(initialContext: EvaluationContext?)

// called when the lifecycle of the OpenFeatureClient is over
// to release resources/threads.
fun shutdown()

// Called by OpenFeatureAPI whenever a new EvaluationContext is set by the application
suspend fun onContextSet(oldContext: EvaluationContext?, newContext: EvaluationContext)
fun onContextSet(oldContext: EvaluationContext?, newContext: EvaluationContext)
fun getBooleanEvaluation(
key: String,
defaultValue: Boolean,
Expand Down
8 changes: 6 additions & 2 deletions OpenFeature/src/main/java/dev/openfeature/sdk/NoOpProvider.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@ package dev.openfeature.sdk

class NoOpProvider : FeatureProvider {
override var metadata: ProviderMetadata = NoOpProviderMetadata("No-op provider")
override suspend fun initialize(initialContext: EvaluationContext?) {
override fun initialize(initialContext: EvaluationContext?) {
// no-op
}

override suspend fun onContextSet(
override fun shutdown() {
// no-op
}

override fun onContextSet(
oldContext: EvaluationContext?,
newContext: EvaluationContext
) {
Expand Down
10 changes: 6 additions & 4 deletions OpenFeature/src/main/java/dev/openfeature/sdk/OpenFeatureAPI.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package dev.openfeature.sdk

import kotlinx.coroutines.coroutineScope

object OpenFeatureAPI {
private var provider: FeatureProvider? = null
private var context: EvaluationContext? = null
var hooks: List<Hook<*>> = listOf()
private set

suspend fun setProvider(provider: FeatureProvider, initialContext: EvaluationContext? = null) = coroutineScope {
fun setProvider(provider: FeatureProvider, initialContext: EvaluationContext? = null) {
this@OpenFeatureAPI.provider = provider
if (initialContext != null) context = initialContext
provider.initialize(context)
Expand All @@ -22,7 +20,7 @@ object OpenFeatureAPI {
provider = null
}

suspend fun setEvaluationContext(evaluationContext: EvaluationContext) {
fun setEvaluationContext(evaluationContext: EvaluationContext) {
context = evaluationContext
getProvider()?.onContextSet(context, evaluationContext)
}
Expand All @@ -46,4 +44,8 @@ object OpenFeatureAPI {
fun clearHooks() {
this.hooks = listOf()
}

fun shutdown() {
provider?.shutdown()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,15 @@ import dev.openfeature.sdk.exceptions.OpenFeatureError.FlagNotFoundError

class AlwaysBrokenProvider(override var hooks: List<Hook<*>> = listOf(), override var metadata: ProviderMetadata = AlwaysBrokenProviderMetadata()) :
FeatureProvider {
override suspend fun initialize(initialContext: EvaluationContext?) {
override fun initialize(initialContext: EvaluationContext?) {
// no-op
}

override suspend fun onContextSet(
override fun shutdown() {
// no-op
}

override fun onContextSet(
oldContext: EvaluationContext?,
newContext: EvaluationContext
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,15 @@ import dev.openfeature.sdk.ProviderMetadata
import dev.openfeature.sdk.Value

class DoSomethingProvider(override val hooks: List<Hook<*>> = listOf(), override val metadata: ProviderMetadata = DoSomethingProviderMetadata()) : FeatureProvider {
override suspend fun initialize(initialContext: EvaluationContext?) {
override fun initialize(initialContext: EvaluationContext?) {
// no-op
}

override suspend fun onContextSet(
override fun shutdown() {
// no-op
}

override fun onContextSet(
oldContext: EvaluationContext?,
newContext: EvaluationContext
) {
Expand Down

0 comments on commit 62dd83c

Please sign in to comment.