semian 0.25.1 → 0.25.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b506d59cbcde1eb9cb0adc3f406ed33f710ce6aa8f8773cfa142bd80acf7622
4
- data.tar.gz: f74a8dfeb7469173e0b6b545ff8ec691ca281cc25331c33f80b375507fc2cbfb
3
+ metadata.gz: c6daa64288b6b4677a2abc6f4e547aa72c0cd47696b1b47fd0d7a2116b5a5cc0
4
+ data.tar.gz: 6fee5050c2d5d3720b22be523303bf23247ecb720361228abf7d1d15f9ed3c65
5
5
  SHA512:
6
- metadata.gz: f0671d6ca7561db895eef1091ca594687f851bbbb6a00f29b7849000641eacebd2ab21cf26bd727ba47f432b285190fccd5c76152aa9f1f7c06fad360bb3cb41
7
- data.tar.gz: 71749f811814a2b93f97f09321846f54d151b043ec51358b72bbeea33be6998b6b5f1b786e6d940164e7b87a31c4ad63388c57f89180850246adc7445e653f42
6
+ metadata.gz: 7bf4baa41c3a9ccfacc8406b15f2bd85c39138593be9318f0712da906f8c816dc94b90d5097603d94b9f341fc8923b8d61854dad5f5197dfcda2dc2050a9d83c
7
+ data.tar.gz: 55c9dcf87364ca17819475fbcd183f17ad8aadd3b8f32e80ce8cb3bc15a9459a02435c709f7ab057dba1eefb0c6c8e622d87acccc96dec0c493147c05fac5d12
@@ -49,7 +49,8 @@ module Semian
49
49
  last_error = nil unless last_error.is_a?(Exception) # Net::HTTPServerError is not an exception
50
50
  raise self.class::CircuitOpenError.new(semian_identifier, message), cause: last_error
51
51
  rescue ::Semian::BaseError => error
52
- raise self.class::ResourceBusyError.new(semian_identifier, error.message)
52
+ message = "Semian Resource #{semian_identifier}: #{error.message}"
53
+ raise self.class::ResourceBusyError.new(semian_identifier, message)
53
54
  rescue *resource_exceptions => error
54
55
  error.semian_identifier = semian_identifier if error.respond_to?(:semian_identifier=)
55
56
  raise
@@ -39,7 +39,7 @@ module Semian
39
39
  def acquire(resource = nil, &block)
40
40
  transition_to_half_open if transition_to_half_open?
41
41
 
42
- raise OpenCircuitError unless request_allowed?
42
+ raise OpenCircuitError, "Circuit breaker is open for resource: #{@name}" unless request_allowed?
43
43
 
44
44
  result = nil
45
45
  begin
@@ -10,7 +10,7 @@ module Semian
10
10
 
11
11
  unless @force_config_validation
12
12
  Semian.logger.info(
13
- "Semian is running in log-mode for configuration validation. This means that Semian will not raise an error if the configuration is invalid. This is not recommended for production environments.\n\n[IMPORTANT] PLEASE UPDATE YOUR CONFIGURATION TO USE `force_config_validation: true` TO ENABLE STRICT CONFIGURATION VALIDATION.\n---\n",
13
+ "Semian Resource #{@name} is running in log-mode for configuration validation. This means that Semian will not raise an error if the configuration is invalid. This is not recommended for production environments.\n\n[IMPORTANT] PLEASE UPDATE YOUR CONFIGURATION TO USE `force_config_validation: true` TO ENABLE STRICT CONFIGURATION VALIDATION.\n---\n",
14
14
  )
15
15
  end
16
16
  end
@@ -29,6 +29,7 @@ module Semian
29
29
  end
30
30
 
31
31
  def raise_or_log_validation_required!(message)
32
+ message = "Semian Resource #{@name}: #{message}"
32
33
  if @force_config_validation
33
34
  raise ArgumentError, message
34
35
  else
@@ -50,7 +51,7 @@ module Semian
50
51
  end
51
52
 
52
53
  def validate_bulkhead_configuration!
53
- return if ENV.key?("SEMIAN_BULKHEAD_DISABLED")
54
+ return if ENV.key?("SEMIAN_BULKHEAD_DISABLED") || !Semian.semaphores_enabled?
54
55
  return unless @configuration.fetch(:bulkhead, true)
55
56
 
56
57
  tickets = @configuration[:tickets]
@@ -126,6 +126,7 @@ module Semian
126
126
 
127
127
  module RedisClientPool
128
128
  include RedisClientCommon
129
+
129
130
  define_method(:semian_resource, Semian::Adapter.instance_method(:semian_resource))
130
131
  define_method(:clear_semian_resource, Semian::Adapter.instance_method(:clear_semian_resource))
131
132
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Semian
4
- VERSION = "0.25.1"
4
+ VERSION = "0.25.3"
5
5
  end
data/lib/semian.rb CHANGED
@@ -199,9 +199,9 @@ module Semian
199
199
  # If consumer who retrieved / registered by a Semian::Adapter, keep track
200
200
  # of who the consumer was so that we can clear the resource reference if needed.
201
201
  consumer = args.delete(:consumer)
202
- if consumer&.class&.include?(Semian::Adapter)
203
- consumers[name] ||= []
204
- consumers[name] << WeakRef.new(consumer)
202
+ if consumer&.class&.include?(Semian::Adapter) && !args[:dynamic]
203
+ consumer_set = (consumers[name] ||= ObjectSpace::WeakMap.new)
204
+ consumer_set[consumer] = true
205
205
  end
206
206
  self[name] || register(name, **args)
207
207
  end
@@ -233,14 +233,8 @@ module Semian
233
233
  resource = resources.delete(name)
234
234
  if resource
235
235
  resource.bulkhead&.unregister_worker
236
- consumers_for_resource = consumers.delete(name) || []
237
- consumers_for_resource.each do |consumer|
238
- if consumer.weakref_alive?
239
- consumer.clear_semian_resource
240
- end
241
- rescue WeakRef::RefError
242
- next
243
- end
236
+ consumers_for_resource = consumers.delete(name) || {}
237
+ consumers_for_resource.each_key(&:clear_semian_resource)
244
238
  end
245
239
  end
246
240
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semian
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.25.1
4
+ version: 0.25.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Francis
@@ -78,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
78
  - !ruby/object:Gem::Version
79
79
  version: '0'
80
80
  requirements: []
81
- rubygems_version: 3.7.1
81
+ rubygems_version: 3.7.2
82
82
  specification_version: 4
83
83
  summary: Bulkheading for Ruby with SysV semaphores
84
84
  test_files: []