async-pool 0.8.0 → 0.8.1

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: eb369c01748a2f2c555a8549a2280c1e39b30a3c7f7918e4e426a79d7eec41ce
4
- data.tar.gz: 5b8d9ac62de382ce06753d04512708cca9c969c7eaf368a1f7b88fa12b6d1eae
3
+ metadata.gz: 8d877fb908af8482011de394630982c4c593e36a5efd9ef19a885bba5774f6e8
4
+ data.tar.gz: be2d7efd8c65a9eec5237acc4f432e76a3f401da0b13e7e10b089f9849382f2a
5
5
  SHA512:
6
- metadata.gz: b18bfe389d25644da07f2e8f85bd92891f7066e1c9b67d6ed91e9a9de1e8d47bcaf4e612c7388619a8693c2f6ee2fc85a09f0cada7647f53a2de5714dbaac30a
7
- data.tar.gz: 0bb8ca350d3942057cfcc91ff957382512ee0e1e012e20344ba71b6bf09df7a353c65d4996341fc8407d99629a8286346a6412a4e6bc6a0199dcaf67e11d069f
6
+ metadata.gz: 3e472af40018c10b2a8d726fc31b04ea96557d790c55e4fe6449a891b048c96da66794926eb7ca726195f778d0bea1e6c9d762b274a06a0922f382d5a8794ab7
7
+ data.tar.gz: 8abacfdcb4b32eb573e0108aecdbdd7ff385386e8a8de2710550b976a81467286e73fa8f36292162e801d5f000fc2a222aabf99f7cf334a35d7e22e47833ded1
checksums.yaml.gz.sig CHANGED
Binary file
@@ -11,6 +11,9 @@ require 'async'
11
11
  require 'async/notification'
12
12
  require 'async/semaphore'
13
13
 
14
+ require 'traces'
15
+ require 'metrics'
16
+
14
17
  module Async
15
18
  module Pool
16
19
  # A resource pool controller.
@@ -154,7 +157,9 @@ module Async
154
157
  retire(resource) unless processed
155
158
  end
156
159
 
157
- private def drain
160
+ def drain
161
+ Console.debug(self, "Draining pool...", size: @resources.size)
162
+
158
163
  # Enumerate all existing resources and retire them:
159
164
  while resource = acquire_existing_resource
160
165
  retire(resource)
@@ -262,6 +267,7 @@ module Async
262
267
 
263
268
  def reuse(resource)
264
269
  Console.debug(self) {"Reuse #{resource}"}
270
+
265
271
  usage = @resources[resource]
266
272
 
267
273
  if usage.nil? || usage.zero?
@@ -286,11 +292,7 @@ module Async
286
292
  @notification.wait
287
293
  end
288
294
 
289
- Console.debug(self) {"Wait for resource -> #{resource}"}
290
-
291
- # if resource.concurrency > 1
292
- # @notification.signal
293
- # end
295
+ # Be careful not to context switch or fail here.
294
296
 
295
297
  return resource
296
298
  end
@@ -318,12 +320,16 @@ module Async
318
320
  def available_resource
319
321
  resource = nil
320
322
 
323
+ Console.debug(self, "Acquiring concurrency guard...", blocking: @guard.blocking?)
324
+
321
325
  @guard.acquire do
326
+ Console.debug(self, "Acquired concurrency guard.")
327
+
322
328
  resource = acquire_or_create_resource
323
329
  end
324
330
 
325
331
  return resource
326
- rescue Exception
332
+ rescue Exception => error
327
333
  reuse(resource) if resource
328
334
  raise
329
335
  end
@@ -375,6 +381,50 @@ module Async
375
381
  return create_resource
376
382
  end
377
383
  end
384
+
385
+ Traces::Provider(self) do
386
+ def create_resource(...)
387
+ attributes = {
388
+ concurrency: @guard.limit,
389
+ size: @resources.size,
390
+ limit: @limit,
391
+ }
392
+
393
+ Traces.trace('async.pool.create', attributes: attributes) {super}
394
+ end
395
+
396
+ def drain(...)
397
+ attributes = {
398
+ size: @resources.size,
399
+ }
400
+
401
+ Traces.trace('async.pool.drain', attributes: attributes) {super}
402
+ end
403
+ end
404
+
405
+ Metrics::Provider(self) do
406
+ ACQUIRE_COUNT = Metrics.metric('async.pool.acquire', :counter, description: 'Number of times a resource was invoked.')
407
+ RELEASE_COUNT = Metrics.metric('async.pool.release', :counter, description: 'Number of times a resource was released.')
408
+ RETIRE_COUNT = Metrics.metric('async.pool.retire', :counter, description: 'Number of times a resource was retired.')
409
+
410
+ def acquire(...)
411
+ ACQUIRE_COUNT.emit(1)
412
+
413
+ super
414
+ end
415
+
416
+ def release(...)
417
+ super.tap do
418
+ RELEASE_COUNT.emit(1)
419
+ end
420
+ end
421
+
422
+ def retire(...)
423
+ super.tap do
424
+ RETIRE_COUNT.emit(1)
425
+ end
426
+ end
427
+ end
378
428
  end
379
429
  end
380
430
  end
@@ -5,6 +5,6 @@
5
5
 
6
6
  module Async
7
7
  module Pool
8
- VERSION = "0.8.0"
8
+ VERSION = "0.8.1"
9
9
  end
10
10
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-pool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -40,7 +40,7 @@ cert_chain:
40
40
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
41
41
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
42
42
  -----END CERTIFICATE-----
43
- date: 2024-08-07 00:00:00.000000000 Z
43
+ date: 2024-08-26 00:00:00.000000000 Z
44
44
  dependencies:
45
45
  - !ruby/object:Gem::Dependency
46
46
  name: async
@@ -56,6 +56,34 @@ dependencies:
56
56
  - - ">="
57
57
  - !ruby/object:Gem::Version
58
58
  version: '1.25'
59
+ - !ruby/object:Gem::Dependency
60
+ name: metrics
61
+ requirement: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ - !ruby/object:Gem::Dependency
74
+ name: traces
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ type: :runtime
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
59
87
  description:
60
88
  email:
61
89
  executables: []
metadata.gz.sig CHANGED
Binary file