async-pool 0.8.0 → 0.8.1

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: 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