async-pool 0.3.5 → 0.3.9

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: 187ab4a00163af3f7b15cef9764a8ba46a33fe353c5784da7efa723f59bf4d07
4
- data.tar.gz: d74bdfc5c5796709ec64e884e4b35b24d6fd438839135503a26cc5f7519dfda0
3
+ metadata.gz: 63f0054e2d8ce94ab52e1186939e06ae2045edd757ba0ba1e0f0eca0f1ec1f80
4
+ data.tar.gz: 10d52bf1f00b7e8062b8ee3bbd612c79d0db07e28fa08e6273814eb686861178
5
5
  SHA512:
6
- metadata.gz: d089f3cbb49ae94b64527a6782f4d3f68c133b96b1a00b17c036356d233c50fde88feb28eb3f65ed367f18760f482b8328e68ba83fa9cd7d0090c57be4aa0f0b
7
- data.tar.gz: e72e69324a4c23b6bd20175189a6350e73b6a2499485587f1465d14aa792dfcd5f7a6866ce4b0fa2ae420461df8d389209d8adf95a9d321a07fa54648227a4ce
6
+ metadata.gz: 3239399837876e2eb1fa00106eafd1d1e8c78c8eceb840fa5c7a694e4d819931803fd4ea8cc1cd6acc490071d379638463eaee8884d46d721488316e60d3cd48
7
+ data.tar.gz: 005f0036c7153b774fd31806f206a69a35b394f99cb899498939dc69b4e2e520d34db342c74ff0c7a6b5345ca4db91f0f68bb269dfc9373b3a55236df08d5934
checksums.yaml.gz.sig ADDED
Binary file
@@ -18,7 +18,7 @@
18
18
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
19
  # THE SOFTWARE.
20
20
 
21
- require 'async/logger'
21
+ require 'console/logger'
22
22
 
23
23
  require 'async'
24
24
  require 'async/notification'
@@ -98,12 +98,14 @@ module Async
98
98
 
99
99
  # Make the resource resources and let waiting tasks know that there is something resources.
100
100
  def release(resource)
101
+ processed = false
102
+
101
103
  # A resource that is not good should also not be reusable.
102
104
  if resource.reusable?
103
- reuse(resource)
104
- else
105
- retire(resource)
105
+ processed = reuse(resource)
106
106
  end
107
+ ensure
108
+ retire(resource) unless processed
107
109
  end
108
110
 
109
111
  def close
@@ -157,13 +159,15 @@ module Async
157
159
  end
158
160
 
159
161
  def retire(resource)
160
- Async.logger.debug(self) {"Retire #{resource}"}
162
+ Console.logger.debug(self) {"Retire #{resource}"}
161
163
 
162
164
  @resources.delete(resource)
163
165
 
164
166
  resource.close
165
167
 
166
168
  @notification.signal
169
+
170
+ return true
167
171
  end
168
172
 
169
173
  protected
@@ -207,7 +211,7 @@ module Async
207
211
  end
208
212
 
209
213
  def reuse(resource)
210
- Async.logger.debug(self) {"Reuse #{resource}"}
214
+ Console.logger.debug(self) {"Reuse #{resource}"}
211
215
  usage = @resources[resource]
212
216
 
213
217
  if usage.zero?
@@ -229,6 +233,8 @@ module Async
229
233
  @resources[resource] = usage - 1
230
234
 
231
235
  @notification.signal
236
+
237
+ return true
232
238
  end
233
239
 
234
240
  def wait_for_resource
@@ -237,7 +243,7 @@ module Async
237
243
  @notification.wait
238
244
  end
239
245
 
240
- Async.logger.debug(self) {"Wait for resource -> #{resource}"}
246
+ Console.logger.debug(self) {"Wait for resource -> #{resource}"}
241
247
 
242
248
  # if resource.concurrency > 1
243
249
  # @notification.signal
@@ -265,36 +271,45 @@ module Async
265
271
 
266
272
  # @returns [Object] An existing resource in a "used" state.
267
273
  def available_resource
274
+ resource = nil
275
+
268
276
  @guard.acquire do
269
- while resource = @available.last
270
- if usage = @resources[resource] and usage < resource.concurrency
271
- if resource.viable?
272
- usage = (@resources[resource] += 1)
273
-
274
- if usage == resource.concurrency
275
- # The resource is used up to it's limit:
276
- @available.pop
277
- end
278
-
279
- return resource
280
- else
281
- retire(resource)
277
+ resource = get_resource
278
+ end
279
+
280
+ return resource
281
+ rescue Exception
282
+ reuse(resource) if resource
283
+ raise
284
+ end
285
+
286
+ private def get_resource
287
+ while resource = @available.last
288
+ if usage = @resources[resource] and usage < resource.concurrency
289
+ if resource.viable?
290
+ usage = (@resources[resource] += 1)
291
+
292
+ if usage == resource.concurrency
293
+ # The resource is used up to it's limit:
282
294
  @available.pop
283
295
  end
296
+
297
+ return resource
284
298
  else
285
- # The resource has been removed already, so skip it and remove it from the availability list.
299
+ retire(resource)
286
300
  @available.pop
287
301
  end
288
- end
289
-
290
- if @limit.nil? or @resources.size < @limit
291
- Async.logger.debug(self) {"No available resources, allocating new one..."}
292
-
293
- return create_resource
302
+ else
303
+ # The resource has been removed already, so skip it and remove it from the availability list.
304
+ @available.pop
294
305
  end
295
306
  end
296
307
 
297
- return nil
308
+ if @limit.nil? or @resources.size < @limit
309
+ Console.logger.debug(self) {"No available resources, allocating new one..."}
310
+
311
+ return create_resource
312
+ end
298
313
  end
299
314
  end
300
315
  end
@@ -18,7 +18,7 @@
18
18
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
19
  # THE SOFTWARE.
20
20
 
21
- require 'async/logger'
21
+ require 'console/logger'
22
22
 
23
23
  require 'async/notification'
24
24
  require 'async/semaphore'
@@ -58,6 +58,10 @@ module Async
58
58
 
59
59
  # Close the resource explicitly, e.g. the pool is being closed.
60
60
  def close
61
+ if @closed
62
+ raise "Already closed!"
63
+ end
64
+
61
65
  @closed = true
62
66
  end
63
67
 
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Async
22
22
  module Pool
23
- VERSION = "0.3.5"
23
+ VERSION = "0.3.9"
24
24
  end
25
25
  end
data.tar.gz.sig ADDED
Binary file
metadata CHANGED
@@ -1,27 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-pool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  autorequire:
9
9
  bindir: bin
10
- cert_chain: []
11
- date: 2021-02-13 00:00:00.000000000 Z
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIEhDCCAuygAwIBAgIBATANBgkqhkiG9w0BAQsFADA3MTUwMwYDVQQDDCxzYW11
14
+ ZWwud2lsbGlhbXMvREM9b3Jpb250cmFuc2Zlci9EQz1jby9EQz1uejAeFw0yMTA4
15
+ MTYwNjMzNDRaFw0yMjA4MTYwNjMzNDRaMDcxNTAzBgNVBAMMLHNhbXVlbC53aWxs
16
+ aWFtcy9EQz1vcmlvbnRyYW5zZmVyL0RDPWNvL0RDPW56MIIBojANBgkqhkiG9w0B
17
+ AQEFAAOCAY8AMIIBigKCAYEAyXLSS/cw+fXJ5e7hi+U/TeChPWeYdwJojDsFY1xr
18
+ xvtqbTTL8gbLHz5LW3QD2nfwCv3qTlw0qI3Ie7a9VMJMbSvgVEGEfQirqIgJXWMj
19
+ eNMDgKsMJtC7u/43abRKx7TCURW3iWyR19NRngsJJmaR51yGGGm2Kfsr+JtKKLtL
20
+ L188Wm3f13KAx7QJU8qyuBnj1/gWem076hzdA7xi1DbrZrch9GCRz62xymJlrJHn
21
+ 9iZEZ7AxrS7vokhMlzSr/XMUihx/8aFKtk+tMLClqxZSmBWIErWdicCGTULXCBNb
22
+ E/mljo4zEVKhlTWpJklMIhr55ZRrSarKFuW7en0+tpJrfsYiAmXMJNi4XAYJH7uL
23
+ rgJuJwSaa/dMz+VmUoo7VKtSfCoOI+6v5/z0sK3oT6sG6ZwyI47DBq2XqNC6tnAj
24
+ w+XmCywiTQrFzMMAvcA7rPI4F0nU1rZId51rOvvfxaONp+wgTi4P8owZLw0/j0m4
25
+ 8C20DYi6EYx4AHDXiLpElWh3AgMBAAGjgZowgZcwCQYDVR0TBAIwADALBgNVHQ8E
26
+ BAMCBLAwHQYDVR0OBBYEFB6ZaeWKxQjGTI+pmz7cKRmMIywwMC4GA1UdEQQnMCWB
27
+ I3NhbXVlbC53aWxsaWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MC4GA1UdEgQnMCWB
28
+ I3NhbXVlbC53aWxsaWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MA0GCSqGSIb3DQEB
29
+ CwUAA4IBgQBVoM+pu3dpdUhZM1w051iw5GfiqclAr1Psypf16Tiod/ho//4oAu6T
30
+ 9fj3DPX/acWV9P/FScvqo4Qgv6g4VWO5ZU7z2JmPoTXZtYMunRAmQPFL/gSUc6aK
31
+ vszMHIyhtyzRc6DnfW2AiVOjMBjaYv8xXZc9bduniRVPrLR4J7ozmGLh4o4uJp7w
32
+ x9KCFaR8Lvn/r0oJWJOqb/DMAYI83YeN2Dlt3jpwrsmsONrtC5S3gOUle5afSGos
33
+ bYt5ocnEpKSomR9ZtnCGljds/aeO1Xgpn2r9HHcjwnH346iNrnHmMlC7BtHUFPDg
34
+ Ts92S47PTOXzwPBDsrFiq3VLbRjHSwf8rpqybQBH9MfzxGGxTaETQYOd6b4e4Ag6
35
+ y92abGna0bmIEb4+Tx9rQ10Uijh1POzvr/VTH4bbIPy9FbKrRsIQ24qDbNJRtOpE
36
+ RAOsIl+HOBTb252nx1kIRN5hqQx272AJCbCjKx8egcUQKffFVVCI0nye09v5CK+a
37
+ HiLJ8VOFx6w=
38
+ -----END CERTIFICATE-----
39
+ date: 2021-09-30 00:00:00.000000000 Z
12
40
  dependencies:
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: async
15
43
  requirement: !ruby/object:Gem::Requirement
16
44
  requirements:
17
- - - "~>"
45
+ - - ">="
18
46
  - !ruby/object:Gem::Version
19
47
  version: '1.25'
20
48
  type: :runtime
21
49
  prerelease: false
22
50
  version_requirements: !ruby/object:Gem::Requirement
23
51
  requirements:
24
- - - "~>"
52
+ - - ">="
25
53
  - !ruby/object:Gem::Version
26
54
  version: '1.25'
27
55
  - !ruby/object:Gem::Dependency
@@ -38,34 +66,6 @@ dependencies:
38
66
  - - "~>"
39
67
  - !ruby/object:Gem::Version
40
68
  version: '1.1'
41
- - !ruby/object:Gem::Dependency
42
- name: bake-bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: bake-modernize
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  requirements: []
141
- rubygems_version: 3.1.2
141
+ rubygems_version: 3.1.6
142
142
  signing_key:
143
143
  specification_version: 4
144
144
  summary: A singleplex and multiplex resource pool for implementing robust clients.
metadata.gz.sig ADDED
Binary file