Skip to content
Merged
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
25 changes: 19 additions & 6 deletions lib/semian.rb
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ module Semian
OpenCircuitError = Class.new(BaseError)
SemaphoreMissingError = Class.new(BaseError)

attr_accessor :maximum_lru_size, :minimum_lru_time, :default_permissions, :namespace, :default_force_config_validation, :resources, :consumers
attr_accessor :maximum_lru_size, :minimum_lru_time, :default_permissions, :namespace, :default_force_config_validation

self.maximum_lru_size = 500
self.minimum_lru_time = 300 # 300 seconds / 5 minutes
Expand All @@ -123,9 +123,6 @@ def thread_safe=(thread_safe)
@thread_safe = thread_safe
end

self.resources = LRUHash.new
self.consumers = Concurrent::Map.new

@reset_mutex = Mutex.new

def issue_disabled_semaphores_warning
Expand Down Expand Up @@ -265,8 +262,8 @@ def unregister_all_resources

def reset!
@reset_mutex.synchronize do
self.consumers = Concurrent::Map.new
self.resources = LRUHash.new
@consumers = Concurrent::Map.new
@resources = LRUHash.new
end
end

Expand All @@ -285,6 +282,22 @@ def disable_bulkheads_for_thread(thread)
thread.thread_variable_set(THREAD_BULKHEAD_DISABLED_VAR, old_value)
end

def resources
return @resources if defined?(@resources) && @resources

@reset_mutex.synchronize do
@resources ||= LRUHash.new
end
end

def consumers
return @consumers if defined?(@consumers) && @consumers

@reset_mutex.synchronize do
@consumers ||= Concurrent::Map.new
end
end

private

def create_circuit_breaker(name, **options)
Expand Down