Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions features/step_definitions/evaluation_steps.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,8 @@
when "stale" then OpenFeature::SDK::ProviderState::STALE
end

registry = OpenFeature::SDK.configuration.send(:instance_variable_get, :@provider_state_registry)
registry.send(:instance_variable_get, :@mutex).synchronize do
states = registry.send(:instance_variable_get, :@states)
states[provider.object_id] = {state: state, details: {}}
end
registry = OpenFeature::SDK.configuration.instance_variable_get(:@provider_state_registry)
registry.set_initial_state(provider, state)

@provider = provider
end
Expand Down
14 changes: 7 additions & 7 deletions lib/open_feature/sdk/provider_state_registry.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ module SDK
# Tracks provider states
class ProviderStateRegistry
def initialize
@states = {}
@states = {}.compare_by_identity
@mutex = Mutex.new
Comment thread
cristiangmarta marked this conversation as resolved.
end

def set_initial_state(provider, state = ProviderState::NOT_READY)
return unless provider

@mutex.synchronize do
@states[provider.object_id] = {state: state, details: {}}
@states[provider] = {state: state, details: {}}
end
end

Expand All @@ -29,7 +29,7 @@ def update_state_from_event(provider, event_type, event_details = nil)
# Only update state if the event should cause a state change
if new_state
@mutex.synchronize do
@states[provider.object_id] = {state: new_state, details: event_details || {}}
@states[provider] = {state: new_state, details: event_details || {}}
end
new_state
else
Expand All @@ -42,7 +42,7 @@ def get_state(provider)
return ProviderState::NOT_READY unless provider

@mutex.synchronize do
entry = @states[provider.object_id]
entry = @states[provider]
entry ? entry[:state] : ProviderState::NOT_READY
end
end
Expand All @@ -51,7 +51,7 @@ def get_details(provider)
return {} unless provider

@mutex.synchronize do
entry = @states[provider.object_id]
entry = @states[provider]
entry ? entry[:details] : {}
end
end
Expand All @@ -60,15 +60,15 @@ def remove_provider(provider)
return unless provider

@mutex.synchronize do
@states.delete(provider.object_id)
@states.delete(provider)
end
end

def tracked?(provider)
return false unless provider

@mutex.synchronize do
@states.key?(provider.object_id)
@states.key?(provider)
end
end

Expand Down
4 changes: 2 additions & 2 deletions spec/open_feature/sdk/provider_state_registry_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@

RSpec.describe OpenFeature::SDK::ProviderStateRegistry do
let(:registry) { described_class.new }
let(:provider) { double("Provider", object_id: 12_345) }
let(:provider2) { double("Provider2", object_id: 67_890) }
let(:provider) { double("Provider") }
let(:provider2) { double("Provider2") }
Comment thread
cristiangmarta marked this conversation as resolved.

describe "#set_initial_state" do
it "sets NOT_READY as default state" do
Expand Down
Loading