async-container 0.16.5 → 0.16.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/lib/async/container.rb +0 -1
  3. data/lib/async/container/best.rb +9 -3
  4. data/lib/async/container/channel.rb +13 -0
  5. data/lib/async/container/controller.rb +46 -25
  6. data/lib/async/container/error.rb +21 -0
  7. data/lib/async/container/forked.rb +5 -1
  8. data/lib/async/container/generic.rb +70 -20
  9. data/lib/async/container/group.rb +19 -4
  10. data/lib/async/container/hybrid.rb +5 -0
  11. data/lib/async/container/keyed.rb +12 -0
  12. data/lib/async/container/notify.rb +4 -5
  13. data/lib/async/container/notify/client.rb +16 -1
  14. data/lib/async/container/notify/console.rb +8 -21
  15. data/lib/async/container/notify/pipe.rb +8 -22
  16. data/lib/async/container/notify/server.rb +0 -1
  17. data/lib/async/container/notify/socket.rb +14 -1
  18. data/lib/async/container/process.rb +28 -2
  19. data/lib/async/container/statistics.rb +16 -0
  20. data/lib/async/container/thread.rb +41 -6
  21. data/lib/async/container/threaded.rb +5 -1
  22. data/lib/async/container/version.rb +1 -1
  23. metadata +13 -84
  24. data/.editorconfig +0 -6
  25. data/.github/workflows/development.yml +0 -36
  26. data/.gitignore +0 -21
  27. data/.rspec +0 -3
  28. data/.yardopts +0 -1
  29. data/Gemfile +0 -19
  30. data/Guardfile +0 -14
  31. data/README.md +0 -140
  32. data/async-container.gemspec +0 -34
  33. data/examples/async.rb +0 -22
  34. data/examples/channel.rb +0 -45
  35. data/examples/channels/client.rb +0 -103
  36. data/examples/container.rb +0 -33
  37. data/examples/isolate.rb +0 -36
  38. data/examples/minimal.rb +0 -94
  39. data/examples/test.rb +0 -51
  40. data/examples/threads.rb +0 -25
  41. data/examples/title.rb +0 -13
  42. data/examples/udppipe.rb +0 -35
  43. data/spec/async/container/controller_spec.rb +0 -148
  44. data/spec/async/container/dots.rb +0 -29
  45. data/spec/async/container/forked_spec.rb +0 -61
  46. data/spec/async/container/hybrid_spec.rb +0 -36
  47. data/spec/async/container/notify/notify.rb +0 -19
  48. data/spec/async/container/notify/pipe_spec.rb +0 -48
  49. data/spec/async/container/notify_spec.rb +0 -56
  50. data/spec/async/container/shared_examples.rb +0 -80
  51. data/spec/async/container/threaded_spec.rb +0 -35
  52. data/spec/async/container_spec.rb +0 -41
  53. data/spec/spec_helper.rb +0 -21
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2019, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require 'async/container/hybrid'
24
- require 'async/container/best'
25
-
26
- require_relative 'shared_examples'
27
-
28
- RSpec.describe Async::Container::Hybrid, if: Async::Container.fork? do
29
- subject {described_class.new}
30
-
31
- it_behaves_like Async::Container
32
-
33
- it "should be multiprocess" do
34
- expect(described_class).to be_multiprocess
35
- end
36
- end
@@ -1,19 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require_relative '../../../../lib/async/container'
5
-
6
- class MyController < Async::Container::Controller
7
- def setup(container)
8
- container.run(restart: false) do |instance|
9
- sleep(rand)
10
-
11
- instance.ready!
12
-
13
- sleep(rand)
14
- end
15
- end
16
- end
17
-
18
- controller = MyController.new
19
- controller.run
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2020, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require "async/container/controller"
24
-
25
- RSpec.describe Async::Container::Notify::Pipe do
26
- let(:notify_script) {File.expand_path("notify.rb", __dir__)}
27
-
28
- it "receives notification of child status" do
29
- container = Async::Container.new
30
-
31
- container.spawn(restart: false) do |instance|
32
- instance.exec(
33
- "bundle", "exec", "--keep-file-descriptors",
34
- notify_script, ready: false
35
- )
36
- end
37
-
38
- # Wait for the state to be updated by the child process:
39
- container.sleep
40
-
41
- _child, state = container.state.first
42
- expect(state).to be == {status: "Initializing..."}
43
-
44
- container.wait
45
-
46
- expect(container.statistics).to have_attributes(failures: 0)
47
- end
48
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2020, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require "async/container/controller"
24
- require "async/container/notify/server"
25
-
26
- RSpec.describe Async::Container::Notify, if: Async::Container.fork? do
27
- let(:server) {described_class::Server.open}
28
- let(:notify_socket) {server.path}
29
- let(:client) {described_class::Socket.new(notify_socket)}
30
-
31
- describe '#ready!' do
32
- it "should send message" do
33
- begin
34
- context = server.bind
35
-
36
- pid = fork do
37
- client.ready!
38
- end
39
-
40
- messages = []
41
-
42
- Sync do
43
- context.receive do |message, address|
44
- messages << message
45
- break
46
- end
47
- end
48
-
49
- expect(messages.last).to include(ready: true)
50
- ensure
51
- context&.close
52
- Process.wait(pid) if pid
53
- end
54
- end
55
- end
56
- end
@@ -1,80 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require 'async/rspec/reactor'
24
-
25
- RSpec.shared_examples_for Async::Container do
26
- it "can run concurrently" do
27
- input, output = IO.pipe
28
-
29
- subject.async do
30
- output.write "Hello World"
31
- end
32
-
33
- subject.wait
34
-
35
- output.close
36
- expect(input.read).to be == "Hello World"
37
- end
38
-
39
- it "can run concurrently" do
40
- subject.async(name: "Sleepy Jerry") do |task, instance|
41
- 3.times do |i|
42
- instance.name = "Counting Sheep #{i}"
43
-
44
- sleep 0.01
45
- end
46
- end
47
-
48
- subject.wait
49
- end
50
-
51
- describe '#sleep' do
52
- it "can sleep for a short time" do
53
- subject.spawn do
54
- sleep(0.2 * QUANTUM)
55
- raise "Boom"
56
- end
57
-
58
- subject.sleep(0.1 * QUANTUM)
59
- expect(subject.statistics).to have_attributes(failures: 0)
60
-
61
- subject.wait
62
-
63
- expect(subject.statistics).to have_attributes(failures: 1)
64
- end
65
- end
66
-
67
- describe '#stop' do
68
- it 'can stop the child process' do
69
- subject.spawn do
70
- sleep(1)
71
- end
72
-
73
- is_expected.to be_running
74
-
75
- subject.stop
76
-
77
- is_expected.to_not be_running
78
- end
79
- end
80
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require "async/container/threaded"
24
-
25
- require_relative 'shared_examples'
26
-
27
- RSpec.describe Async::Container::Threaded do
28
- subject {described_class.new}
29
-
30
- it_behaves_like Async::Container
31
-
32
- it "should not be multiprocess" do
33
- expect(described_class).to_not be_multiprocess
34
- end
35
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2017, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require "async/container"
24
-
25
- RSpec.describe Async::Container do
26
- it "can get processor count" do
27
- expect(Async::Container.processor_count).to be >= 1
28
- end
29
-
30
- it "can get best container class" do
31
- expect(Async::Container.best_container_class).to_not be_nil
32
- end
33
-
34
- subject {Async::Container.new}
35
-
36
- it "can get best container class" do
37
- expect(subject).to_not be_nil
38
-
39
- subject.stop
40
- end
41
- end
data/spec/spec_helper.rb DELETED
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'covered/rspec'
4
-
5
- # Shared rspec helpers:
6
- require "async/rspec"
7
-
8
- if RUBY_PLATFORM =~ /darwin/i
9
- QUANTUM = 2.0
10
- else
11
- QUANTUM = 1.0
12
- end
13
-
14
- RSpec.configure do |config|
15
- # Enable flags like --only-failures and --next-failure
16
- config.example_status_persistence_file_path = ".rspec_status"
17
-
18
- config.expect_with :rspec do |c|
19
- c.syntax = :expect
20
- end
21
- end