async-container 0.20.0 → 0.20.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: a95321eeaead4fafe8c8db6bfa186d13559c8b39185c566db474ff2111e3add8
4
- data.tar.gz: 873a71e53157cf3f5c94908daff4848f88b0bb06c35e10fd89c569fe6a646386
3
+ metadata.gz: 2435dd48259ab4b6bbad01780c21dc91bdf2946485f1dd682c8388b9ee68410d
4
+ data.tar.gz: c8e3564e5c889f469658eb044444bc6884575090ed38e73f07bcffdfe893f823
5
5
  SHA512:
6
- metadata.gz: e974514dc85a284427791fffa2299c1541f4330b60f4d1470a64c9d2591d9c9c5a59250d9560e4b61ca43024869681f5f2cdc89ab086b178a391105318691b9d
7
- data.tar.gz: 712370e1ea844ede123bb6215422c393109e50133db7991242b748f013e75904494af9300fdcbcd5de490c65c473fb195eac46eabbb5d5f34e1a774235cf5e8e
6
+ metadata.gz: fa56a0207d1bab96685c25ca8f3617a5e5aefeb673998d836780baf75e1ff9ee9618ac4e506f893de206f425277a7abb0dc12f748850d59e037f5f155763b9d9
7
+ data.tar.gz: 1198eaa52f0ea7dfe3b411c1e6cf6866f720f9aa4b5b1913fee2fbb535144115b4e2e3e21e313fa01faa64e724e7e786e32732c0889d2c8601c8ccce72dfe967
checksums.yaml.gz.sig CHANGED
Binary file
@@ -39,7 +39,7 @@ module Async
39
39
  UNNAMED = "Unnamed"
40
40
 
41
41
  def initialize(**options)
42
- @group = Group.new
42
+ @group = Group.new(**options)
43
43
  @running = true
44
44
 
45
45
  @state = {}
@@ -48,8 +48,10 @@ module Async
48
48
  @keyed = {}
49
49
  end
50
50
 
51
+ # @attribute [Group] The group of running children instances.
51
52
  attr :group
52
53
 
54
+ # @attribute [Hash(Child, Hash)] The state of each child instance.
53
55
  attr :state
54
56
 
55
57
  # A human readable representation of the container.
@@ -15,7 +15,8 @@ module Async
15
15
  # @parameter count [Integer] The number of instances to start.
16
16
  # @parameter forks [Integer] The number of processes to fork.
17
17
  # @parameter threads [Integer] the number of threads to start.
18
- def run(count: nil, forks: nil, threads: nil, **options, &block)
18
+ # @parameter health_check_timeout [Numeric] The timeout for health checks, in seconds. Passed into the child {Threaded} containers.
19
+ def run(count: nil, forks: nil, threads: nil, health_check_timeout: nil, **options, &block)
19
20
  processor_count = Container.processor_count
20
21
  count ||= processor_count ** 2
21
22
  forks ||= [processor_count, count].min
@@ -25,7 +26,7 @@ module Async
25
26
  self.spawn(**options) do |instance|
26
27
  container = Threaded.new
27
28
 
28
- container.run(count: threads, **options, &block)
29
+ container.run(count: threads, health_check_timeout: health_check_timeout, **options, &block)
29
30
 
30
31
  container.wait_until_ready
31
32
  instance.ready!
@@ -34,6 +35,7 @@ module Async
34
35
  rescue Async::Container::Terminate
35
36
  # Stop it immediately:
36
37
  container.stop(false)
38
+ raise
37
39
  ensure
38
40
  # Stop it gracefully (also code path for Interrupt):
39
41
  container.stop
@@ -5,6 +5,6 @@
5
5
 
6
6
  module Async
7
7
  module Container
8
- VERSION = "0.20.0"
8
+ VERSION = "0.20.1"
9
9
  end
10
10
  end
data/readme.md CHANGED
@@ -14,7 +14,24 @@ Provides containers which implement parallelism for clients and servers.
14
14
 
15
15
  ## Usage
16
16
 
17
- Please see the [project documentation](https://socketry.github.io/async-container/).
17
+ Please see the [project documentation](https://socketry.github.io/async-container/) for more details.
18
+
19
+ - [Getting Started](https://socketry.github.io/async-container/guides/getting-started/index) - This guide explains how to use `async-container` to build basic scalable systems.
20
+
21
+ ## Releases
22
+
23
+ Please see the [project releases](https://socketry.github.io/async-container/releases/index) for all releases.
24
+
25
+ ### v0.20.1
26
+
27
+ - Fix compatibility between <code class="language-ruby">Async::Container::Hybrid</code> and the health check.
28
+ - <code class="language-ruby">Async::Container::Generic\#initialize</code> passes unused arguments through to <code class="language-ruby">Async::Container::Group</code>.
29
+
30
+ ### v0.20.0
31
+
32
+ - Improve container signal handling reliability by using `Thread.handle_interrupt` except at known safe points.
33
+ - Improved logging when child process fails and container startup.
34
+ - [Add `health_check_timeout` for detecting hung processes.](https://socketry.github.io/async-container/releases/index#add-health_check_timeout-for-detecting-hung-processes.)
18
35
 
19
36
  ## Contributing
20
37
 
data/releases.md CHANGED
@@ -1,6 +1,47 @@
1
1
  # Releases
2
2
 
3
- ## Unreleased
3
+ ## v0.20.1
4
+
5
+ - Fix compatibility between {ruby Async::Container::Hybrid} and the health check.
6
+ - {ruby Async::Container::Generic\#initialize} passes unused arguments through to {ruby Async::Container::Group}.
7
+
8
+ ## v0.20.0
4
9
 
5
10
  - Improve container signal handling reliability by using `Thread.handle_interrupt` except at known safe points.
6
11
  - Improved logging when child process fails and container startup.
12
+
13
+ ### Add `health_check_timeout` for detecting hung processes.
14
+
15
+ In order to detect hung processes, a `health_check_timeout` can be specified when spawning children workers. If the health check does not complete within the specified timeout, the child process is killed.
16
+
17
+ ``` ruby
18
+ require "async/container"
19
+
20
+ container = Async::Container.new
21
+
22
+ container.run(count: 1, restart: true, health_check_timeout: 1) do |instance|
23
+ while true
24
+ # This example will fail sometimes:
25
+ sleep(0.5 + rand)
26
+ instance.ready!
27
+ end
28
+ end
29
+
30
+ container.wait
31
+ ```
32
+
33
+ If the health check does not complete within the specified timeout, the child process is killed:
34
+
35
+ ```
36
+ 3.01s warn: Async::Container::Forked [oid=0x1340] [ec=0x1348] [pid=27100] [2025-02-20 13:24:55 +1300]
37
+ | Child failed health check!
38
+ | {
39
+ | "child": {
40
+ | "name": "Unnamed",
41
+ | "pid": 27101,
42
+ | "status": null
43
+ | },
44
+ | "age": 1.0612829999881797,
45
+ | "health_check_timeout": 1
46
+ | }
47
+ ```
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-container
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.0
4
+ version: 0.20.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: 2025-02-07 00:00:00.000000000 Z
43
+ date: 2025-02-20 00:00:00.000000000 Z
44
44
  dependencies:
45
45
  - !ruby/object:Gem::Dependency
46
46
  name: async
metadata.gz.sig CHANGED
Binary file