polyphony 1.1 → 1.2
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 +4 -4
- data/.github/workflows/test.yml +1 -1
- data/.github/workflows/test_io_uring.yml +1 -1
- data/.rubocop.yml +16 -8
- data/CHANGELOG.md +13 -0
- data/README.md +2 -1
- data/docs/advanced-io.md +141 -44
- data/docs/cancellation.md +213 -0
- data/docs/readme.md +2 -1
- data/examples/core/enumerator.rb +92 -0
- data/examples/io/https_server_sni_2.rb +1 -1
- data/ext/polyphony/backend_common.c +11 -0
- data/ext/polyphony/backend_common.h +2 -0
- data/ext/polyphony/backend_io_uring.c +1 -1
- data/ext/polyphony/backend_libev.c +1 -1
- data/ext/polyphony/polyphony.h +3 -1
- data/lib/polyphony/core/debug.rb +24 -29
- data/lib/polyphony/core/exceptions.rb +0 -3
- data/lib/polyphony/core/sync.rb +0 -3
- data/lib/polyphony/core/thread_pool.rb +1 -5
- data/lib/polyphony/core/throttler.rb +0 -1
- data/lib/polyphony/core/timer.rb +7 -9
- data/lib/polyphony/extensions/exception.rb +0 -1
- data/lib/polyphony/extensions/fiber.rb +41 -28
- data/lib/polyphony/extensions/io.rb +86 -93
- data/lib/polyphony/extensions/kernel.rb +52 -16
- data/lib/polyphony/extensions/object.rb +7 -6
- data/lib/polyphony/extensions/openssl.rb +6 -8
- data/lib/polyphony/extensions/pipe.rb +5 -7
- data/lib/polyphony/extensions/socket.rb +28 -37
- data/lib/polyphony/extensions/thread.rb +2 -4
- data/lib/polyphony/extensions/timeout.rb +0 -1
- data/lib/polyphony/version.rb +1 -1
- data/lib/polyphony.rb +4 -7
- data/polyphony.gemspec +2 -2
- data/test/test_fiber.rb +6 -6
- data/test/test_global_api.rb +3 -3
- data/test/test_io.rb +2 -2
- data/test/test_socket.rb +2 -2
- data/test/test_supervise.rb +1 -1
- metadata +6 -4
data/lib/polyphony.rb
CHANGED
@@ -60,7 +60,7 @@ module Polyphony
|
|
60
60
|
rescue Polyphony::MoveOn
|
61
61
|
exit!
|
62
62
|
rescue Exception => e
|
63
|
-
|
63
|
+
$stderr << e.full_message
|
64
64
|
exit!
|
65
65
|
ensure
|
66
66
|
exit_forked_process
|
@@ -92,8 +92,8 @@ module Polyphony
|
|
92
92
|
# @!visibility private
|
93
93
|
def install_terminating_signal_handlers
|
94
94
|
trap('SIGTERM') { raise SystemExit }
|
95
|
-
orig_trap('SIGINT') do
|
96
|
-
orig_trap('SIGINT') { exit! }
|
95
|
+
Kernel.orig_trap('SIGINT') do
|
96
|
+
Kernel.orig_trap('SIGINT') { exit! }
|
97
97
|
Fiber.schedule_priority_oob_fiber { raise Interrupt }
|
98
98
|
end
|
99
99
|
end
|
@@ -143,13 +143,10 @@ module Polyphony
|
|
143
143
|
install_at_exit_handler
|
144
144
|
end
|
145
145
|
|
146
|
-
|
147
146
|
if (debug_socket_path = ENV['POLYPHONY_DEBUG_SOCKET_PATH'])
|
148
147
|
puts "Starting debug server on #{debug_socket_path}"
|
149
148
|
require 'polyphony/debugger'
|
150
149
|
Polyphony.start_debug_server(debug_socket_path)
|
151
150
|
end
|
152
151
|
|
153
|
-
if Object.const_defined?(:IRB)
|
154
|
-
require_relative './polyphony/adapters/irb'
|
155
|
-
end
|
152
|
+
require_relative './polyphony/adapters/irb' if Object.const_defined?(:IRB)
|
data/polyphony.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.author = 'Sharon Rosner'
|
9
9
|
s.email = 'sharon@noteflakes.com'
|
10
10
|
s.files = `git ls-files --recurse-submodules`.split.reject { |fn| fn =~ /liburing\/man/ }
|
11
|
-
s.homepage = 'https://digital-fabric
|
11
|
+
s.homepage = 'https://github.com/digital-fabric/polyphony'
|
12
12
|
s.metadata = {
|
13
13
|
"source_code_uri" => "https://github.com/digital-fabric/polyphony",
|
14
14
|
"documentation_uri" => "https://www.rubydoc.info/gems/polyphony",
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.extra_rdoc_files = ["README.md"]
|
19
19
|
s.extensions = ["ext/polyphony/extconf.rb"]
|
20
20
|
s.require_paths = ["lib"]
|
21
|
-
s.required_ruby_version = '>= 3.
|
21
|
+
s.required_ruby_version = '>= 3.1'
|
22
22
|
|
23
23
|
s.add_development_dependency 'rake-compiler', '1.2.1'
|
24
24
|
s.add_development_dependency 'minitest', '5.17.0'
|
data/test/test_fiber.rb
CHANGED
@@ -987,7 +987,7 @@ class MailboxTest < MiniTest::Test
|
|
987
987
|
f << :foo
|
988
988
|
snooze
|
989
989
|
assert_equal [:foo], buffer
|
990
|
-
|
990
|
+
|
991
991
|
f << :bar
|
992
992
|
snooze
|
993
993
|
assert_equal [:foo, :bar], buffer
|
@@ -1011,7 +1011,7 @@ class MailboxTest < MiniTest::Test
|
|
1011
1011
|
f << :foo
|
1012
1012
|
snooze
|
1013
1013
|
assert_equal [:foo], buffer
|
1014
|
-
|
1014
|
+
|
1015
1015
|
f << :bar
|
1016
1016
|
snooze
|
1017
1017
|
assert_equal [:foo, :bar, :done], buffer
|
@@ -1264,7 +1264,7 @@ class GracefulTerminationTest < MiniTest::Test
|
|
1264
1264
|
end
|
1265
1265
|
|
1266
1266
|
3.times { snooze }
|
1267
|
-
f.terminate(false)
|
1267
|
+
f.terminate(graceful: false)
|
1268
1268
|
f.await
|
1269
1269
|
assert_equal [1, 2], buffer
|
1270
1270
|
|
@@ -1280,7 +1280,7 @@ class GracefulTerminationTest < MiniTest::Test
|
|
1280
1280
|
end
|
1281
1281
|
|
1282
1282
|
3.times { snooze }
|
1283
|
-
f.terminate(true)
|
1283
|
+
f.terminate(graceful: true)
|
1284
1284
|
f.await
|
1285
1285
|
assert_equal [1, 2, 4], buffer
|
1286
1286
|
end
|
@@ -1302,12 +1302,12 @@ class GracefulTerminationTest < MiniTest::Test
|
|
1302
1302
|
|
1303
1303
|
sleep
|
1304
1304
|
ensure
|
1305
|
-
Fiber.current.terminate_all_children(true) if Fiber.current.graceful_shutdown?
|
1305
|
+
Fiber.current.terminate_all_children(graceful: true) if Fiber.current.graceful_shutdown?
|
1306
1306
|
Fiber.current.await_all_children
|
1307
1307
|
end
|
1308
1308
|
|
1309
1309
|
3.times { snooze }
|
1310
|
-
f0.terminate(true)
|
1310
|
+
f0.terminate(graceful: true)
|
1311
1311
|
f0.await
|
1312
1312
|
|
1313
1313
|
assert_equal [1, 2], buffer
|
data/test/test_global_api.rb
CHANGED
@@ -129,15 +129,15 @@ class MoveOnAfterTest < MiniTest::Test
|
|
129
129
|
def test_move_on_after_with_reset
|
130
130
|
t0 = monotonic_clock
|
131
131
|
v = move_on_after(0.01, with_value: :moved_on) do |timeout|
|
132
|
-
sleep 0.
|
132
|
+
sleep 0.006
|
133
133
|
timeout.reset
|
134
|
-
sleep 0.
|
134
|
+
sleep 0.006
|
135
135
|
nil
|
136
136
|
end
|
137
137
|
t1 = monotonic_clock
|
138
138
|
|
139
139
|
assert_nil v
|
140
|
-
assert_in_range 0.
|
140
|
+
assert_in_range 0.012..0.025, t1 - t0 if IS_LINUX
|
141
141
|
end
|
142
142
|
|
143
143
|
def test_nested_move_on_after
|
data/test/test_io.rb
CHANGED
@@ -89,7 +89,7 @@ class IOTest < MiniTest::Test
|
|
89
89
|
|
90
90
|
buf = +'def'
|
91
91
|
o << 'foobar'
|
92
|
-
assert_equal 'deffoobar', i.read(6, buf, -1)
|
92
|
+
assert_equal 'deffoobar', i.read(6, buf, buffer_pos: -1)
|
93
93
|
assert_equal 'deffoobar', buf
|
94
94
|
end
|
95
95
|
|
@@ -332,7 +332,7 @@ class IOTest < MiniTest::Test
|
|
332
332
|
splice_lens << len
|
333
333
|
break if len == 0
|
334
334
|
}
|
335
|
-
|
335
|
+
|
336
336
|
o2.close
|
337
337
|
}
|
338
338
|
|
data/test/test_socket.rb
CHANGED
@@ -98,7 +98,7 @@ class TCPSocketTest < MiniTest::Test
|
|
98
98
|
|
99
99
|
buf = +'def'
|
100
100
|
client << 'foobar'
|
101
|
-
assert_equal 'deffoobar', client.read(6, buf, -1)
|
101
|
+
assert_equal 'deffoobar', client.read(6, buf, buffer_pos: -1)
|
102
102
|
assert_equal 'deffoobar', buf
|
103
103
|
|
104
104
|
client.close
|
@@ -365,7 +365,7 @@ class SSLSocketTest < MiniTest::Test
|
|
365
365
|
f = spin do
|
366
366
|
## without ignoring errors
|
367
367
|
f2 = spin do
|
368
|
-
server.accept_loop(false) { |s| handle_http_request(s) }
|
368
|
+
server.accept_loop(ignore_errors: false) { |s| handle_http_request(s) }
|
369
369
|
end
|
370
370
|
f2.await
|
371
371
|
rescue => e
|
data/test/test_supervise.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polyphony
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-06-
|
11
|
+
date: 2023-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -183,6 +183,7 @@ files:
|
|
183
183
|
- docs/assets/echo-fibers.svg
|
184
184
|
- docs/assets/polyphony-logo.png
|
185
185
|
- docs/assets/sleeping-fiber.svg
|
186
|
+
- docs/cancellation.md
|
186
187
|
- docs/cheat-sheet.md
|
187
188
|
- docs/concurrency.md
|
188
189
|
- docs/design-principles.md
|
@@ -214,6 +215,7 @@ files:
|
|
214
215
|
- examples/core/debug.rb
|
215
216
|
- examples/core/deferring-an-operation.rb
|
216
217
|
- examples/core/enumerable.rb
|
218
|
+
- examples/core/enumerator.rb
|
217
219
|
- examples/core/erlang-style-genserver.rb
|
218
220
|
- examples/core/forking.rb
|
219
221
|
- examples/core/handling-signals.rb
|
@@ -647,7 +649,7 @@ files:
|
|
647
649
|
- vendor/liburing/test/version.c
|
648
650
|
- vendor/liburing/test/wakeup-hang.c
|
649
651
|
- vendor/liburing/test/xattr.c
|
650
|
-
homepage: https://digital-fabric
|
652
|
+
homepage: https://github.com/digital-fabric/polyphony
|
651
653
|
licenses:
|
652
654
|
- MIT
|
653
655
|
metadata:
|
@@ -666,7 +668,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
666
668
|
requirements:
|
667
669
|
- - ">="
|
668
670
|
- !ruby/object:Gem::Version
|
669
|
-
version: '3.
|
671
|
+
version: '3.1'
|
670
672
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
671
673
|
requirements:
|
672
674
|
- - ">="
|