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 +4 -4
- data/lib/semian/adapter.rb +2 -1
- data/lib/semian/circuit_breaker.rb +1 -1
- data/lib/semian/configuration_validator.rb +3 -2
- data/lib/semian/redis_client.rb +1 -0
- data/lib/semian/version.rb +1 -1
- data/lib/semian.rb +5 -11
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6daa64288b6b4677a2abc6f4e547aa72c0cd47696b1b47fd0d7a2116b5a5cc0
|
4
|
+
data.tar.gz: 6fee5050c2d5d3720b22be523303bf23247ecb720361228abf7d1d15f9ed3c65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7bf4baa41c3a9ccfacc8406b15f2bd85c39138593be9318f0712da906f8c816dc94b90d5097603d94b9f341fc8923b8d61854dad5f5197dfcda2dc2050a9d83c
|
7
|
+
data.tar.gz: 55c9dcf87364ca17819475fbcd183f17ad8aadd3b8f32e80ce8cb3bc15a9459a02435c709f7ab057dba1eefb0c6c8e622d87acccc96dec0c493147c05fac5d12
|
data/lib/semian/adapter.rb
CHANGED
@@ -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
|
-
|
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]
|
data/lib/semian/redis_client.rb
CHANGED
@@ -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
|
data/lib/semian/version.rb
CHANGED
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
|
-
|
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.
|
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.
|
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.
|
81
|
+
rubygems_version: 3.7.2
|
82
82
|
specification_version: 4
|
83
83
|
summary: Bulkheading for Ruby with SysV semaphores
|
84
84
|
test_files: []
|