semian 0.9.0 → 0.10.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 426aa6c4392e70e79cbf478827dcdccbc1a468f0f19b2a5e42b885584a389b00
4
- data.tar.gz: df5c7c0ca8e80879c1d1d1a5cc46400c2de841e5809ea2396cc91941f222fa05
3
+ metadata.gz: 1f7dfa0e1508d5754a7e551d3930645473a39de58c2c32a01b1eb1e5e6715780
4
+ data.tar.gz: f51263595c18f0d6f240d01c75caaf64e00e7e85bfb268d6b0f0c27cf0b59909
5
5
  SHA512:
6
- metadata.gz: da18cc34e1c36d18904cbb584a9c7a03fd32afa976f27a6ed227b62e4ebb64065ea38a36ac951d0cade1c72b115143c3b24d6299b28de0927c78e52379205f17
7
- data.tar.gz: 1e4dd82c16f7717022e65d4c722a28b4bd06490cbf347dfbe0f9fafd5652b615162f884a6dea04ad5ec5314986f7b0aad3abda8205cf2cc34b434416b001d0ed
6
+ metadata.gz: a37851110c28d95b1c057d5cfae91c9b6a5998449c248cec4940e52d32b4d4af7d9587570ef574583032fbbce078b062f6d16a8b9382c46331855120352f2a48
7
+ data.tar.gz: 41ae095478be0f4761243a6ac4c2a54b9ec0488aea23156d9b80756cb449cbe73863d2814bf28d3f018cd4f4e23320ce184b169af681db27417df54fdd5dcae7
@@ -287,7 +287,7 @@ module Semian
287
287
  Resource.new(name, tickets: options[:tickets], quota: options[:quota], permissions: permissions, timeout: timeout)
288
288
  end
289
289
 
290
- def require_keys!(required = [], **options)
290
+ def require_keys!(required, options)
291
291
  diff = required - options.keys
292
292
  unless diff.empty?
293
293
  raise ArgumentError, "Missing required arguments for Semian: #{diff}"
@@ -5,10 +5,6 @@ class LRUHash
5
5
  # everytime we set a new resource. A default window of
6
6
  # 5 minutes will allow empty item to stay in the hash
7
7
  # for a maximum of 5 minutes
8
- extend Forwardable
9
- def_delegators :@table, :size, :count, :empty?, :values
10
- attr_reader :table
11
-
12
8
  class NoopMutex
13
9
  def synchronize(*)
14
10
  yield
@@ -65,6 +61,22 @@ class LRUHash
65
61
  end
66
62
  end
67
63
 
64
+ def size
65
+ @lock.synchronize { @table.size }
66
+ end
67
+
68
+ def count(&block)
69
+ @lock.synchronize { @table.count(&block) }
70
+ end
71
+
72
+ def empty?
73
+ @lock.synchronize { @table.empty? }
74
+ end
75
+
76
+ def values
77
+ @lock.synchronize { @table.values }
78
+ end
79
+
68
80
  def set(key, resource)
69
81
  @lock.synchronize do
70
82
  @table.delete(key)
@@ -150,11 +162,13 @@ class LRUHash
150
162
 
151
163
  def try_synchronize
152
164
  Thread.handle_interrupt(EXCEPTION_NEVER) do
153
- return false unless @lock.try_lock
154
- Thread.handle_interrupt(EXCEPTION_IMMEDIATE) { yield }
155
- true
156
- ensure
157
- @lock.unlock if @lock.owned?
165
+ begin
166
+ return false unless @lock.try_lock
167
+ Thread.handle_interrupt(EXCEPTION_IMMEDIATE) { yield }
168
+ true
169
+ ensure
170
+ @lock.unlock if @lock.owned?
171
+ end
158
172
  end
159
173
  end
160
174
  end
@@ -116,7 +116,7 @@ module Semian
116
116
  acquire_semian_resource(adapter: :mysql, scope: :connection) { raw_connect(*args) }
117
117
  end
118
118
 
119
- def acquire_semian_resource(*)
119
+ def acquire_semian_resource(**)
120
120
  super
121
121
  rescue ::Mysql2::Error => error
122
122
  if error.is_a?(PingFailure) || (!error.is_a?(::Mysql2::SemianError) && error.message.match?(CONNECTION_ERROR))
@@ -91,6 +91,28 @@ module Semian
91
91
  end
92
92
  end
93
93
 
94
+ def with_resource_timeout(temp_timeout)
95
+ timeout = options[:timeout]
96
+ connect_timeout = options[:connect_timeout]
97
+ read_timeout = options[:read_timeout]
98
+ write_timeout = options[:write_timeout]
99
+
100
+ begin
101
+ connection.timeout = temp_timeout if connected?
102
+ options[:timeout] = Float(temp_timeout),
103
+ options[:connect_timeout] = Float(temp_timeout)
104
+ options[:read_timeout] = Float(temp_timeout)
105
+ options[:write_timeout] = Float(temp_timeout)
106
+ yield
107
+ ensure
108
+ options[:timeout] = timeout
109
+ options[:connect_timeout] = connect_timeout
110
+ options[:read_timeout] = read_timeout
111
+ options[:write_timeout] = write_timeout
112
+ connection.timeout = self.timeout if connected?
113
+ end
114
+ end
115
+
94
116
  private
95
117
 
96
118
  def resource_exceptions
@@ -4,8 +4,8 @@ module Semian
4
4
 
5
5
  class << Semian::Resource
6
6
  # Ensure that there can only be one resource of a given type
7
- def instance(*args)
8
- Semian.resources[args.first] ||= ProtectedResource.new(args.first, new(*args), nil)
7
+ def instance(name, **kwargs)
8
+ Semian.resources[name] ||= ProtectedResource.new(name, new(name, **kwargs), nil)
9
9
  end
10
10
  end
11
11
 
@@ -44,7 +44,7 @@ module Semian
44
44
 
45
45
  module ThreadSafe
46
46
  class SlidingWindow < Simple::SlidingWindow
47
- def initialize(*)
47
+ def initialize(**)
48
48
  super
49
49
  @lock = Mutex.new
50
50
  end
@@ -1,3 +1,3 @@
1
1
  module Semian
2
- VERSION = '0.9.0'
2
+ VERSION = '0.10.3'
3
3
  end
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.9.0
4
+ version: 0.10.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Francis
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-09-04 00:00:00.000000000 Z
13
+ date: 2020-05-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake-compiler
@@ -234,7 +234,8 @@ files:
234
234
  homepage: https://github.com/shopify/semian
235
235
  licenses:
236
236
  - MIT
237
- metadata: {}
237
+ metadata:
238
+ allowed_push_host: https://rubygems.org
238
239
  post_install_message:
239
240
  rdoc_options: []
240
241
  require_paths: