polyphony 1.0.1 → 1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (183) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +1 -1
  3. data/.github/workflows/test_io_uring.yml +1 -1
  4. data/.yardopts +1 -0
  5. data/CHANGELOG.md +9 -0
  6. data/README.md +1 -0
  7. data/TODO.md +6 -12
  8. data/docs/advanced-io.md +224 -0
  9. data/docs/cheat-sheet.md +2 -2
  10. data/docs/readme.md +1 -0
  11. data/examples/core/debug.rb +12 -0
  12. data/examples/core/rpc_benchmark.rb +136 -0
  13. data/examples/core/stream_mockup.rb +68 -0
  14. data/examples/core/throttled_loop_inside_move_on_after.rb +13 -0
  15. data/ext/polyphony/backend_common.c +3 -5
  16. data/ext/polyphony/backend_common.h +10 -1
  17. data/ext/polyphony/backend_io_uring.c +6 -6
  18. data/ext/polyphony/backend_libev.c +5 -5
  19. data/ext/polyphony/extconf.rb +6 -0
  20. data/ext/polyphony/fiber.c +21 -1
  21. data/lib/polyphony/extensions/fiber.rb +1 -0
  22. data/lib/polyphony/extensions/io.rb +74 -74
  23. data/lib/polyphony/extensions/object.rb +6 -0
  24. data/lib/polyphony/extensions/socket.rb +39 -39
  25. data/lib/polyphony/version.rb +1 -1
  26. data/polyphony.gemspec +3 -1
  27. data/test/stress.rb +1 -1
  28. data/test/test_fiber.rb +45 -1
  29. data/test/test_io.rb +46 -0
  30. data/test/test_process_supervision.rb +1 -1
  31. data/test/test_resource_pool.rb +1 -1
  32. data/test/test_scenarios.rb +38 -0
  33. data/test/test_socket.rb +1 -2
  34. data/test/test_thread_pool.rb +4 -2
  35. data/test/test_timer.rb +2 -2
  36. metadata +36 -149
  37. data/vendor/liburing/man/IO_URING_CHECK_VERSION.3 +0 -1
  38. data/vendor/liburing/man/IO_URING_VERSION_MAJOR.3 +0 -1
  39. data/vendor/liburing/man/IO_URING_VERSION_MINOR.3 +0 -1
  40. data/vendor/liburing/man/io_uring.7 +0 -781
  41. data/vendor/liburing/man/io_uring_buf_ring_add.3 +0 -53
  42. data/vendor/liburing/man/io_uring_buf_ring_advance.3 +0 -31
  43. data/vendor/liburing/man/io_uring_buf_ring_cq_advance.3 +0 -41
  44. data/vendor/liburing/man/io_uring_buf_ring_init.3 +0 -30
  45. data/vendor/liburing/man/io_uring_buf_ring_mask.3 +0 -27
  46. data/vendor/liburing/man/io_uring_check_version.3 +0 -72
  47. data/vendor/liburing/man/io_uring_close_ring_fd.3 +0 -43
  48. data/vendor/liburing/man/io_uring_cq_advance.3 +0 -49
  49. data/vendor/liburing/man/io_uring_cq_has_overflow.3 +0 -25
  50. data/vendor/liburing/man/io_uring_cq_ready.3 +0 -26
  51. data/vendor/liburing/man/io_uring_cqe_get_data.3 +0 -53
  52. data/vendor/liburing/man/io_uring_cqe_get_data64.3 +0 -1
  53. data/vendor/liburing/man/io_uring_cqe_seen.3 +0 -42
  54. data/vendor/liburing/man/io_uring_enter.2 +0 -1700
  55. data/vendor/liburing/man/io_uring_enter2.2 +0 -1
  56. data/vendor/liburing/man/io_uring_free_probe.3 +0 -27
  57. data/vendor/liburing/man/io_uring_get_events.3 +0 -33
  58. data/vendor/liburing/man/io_uring_get_probe.3 +0 -30
  59. data/vendor/liburing/man/io_uring_get_sqe.3 +0 -57
  60. data/vendor/liburing/man/io_uring_major_version.3 +0 -1
  61. data/vendor/liburing/man/io_uring_minor_version.3 +0 -1
  62. data/vendor/liburing/man/io_uring_opcode_supported.3 +0 -30
  63. data/vendor/liburing/man/io_uring_peek_cqe.3 +0 -38
  64. data/vendor/liburing/man/io_uring_prep_accept.3 +0 -197
  65. data/vendor/liburing/man/io_uring_prep_accept_direct.3 +0 -1
  66. data/vendor/liburing/man/io_uring_prep_cancel.3 +0 -118
  67. data/vendor/liburing/man/io_uring_prep_cancel64.3 +0 -1
  68. data/vendor/liburing/man/io_uring_prep_close.3 +0 -59
  69. data/vendor/liburing/man/io_uring_prep_close_direct.3 +0 -1
  70. data/vendor/liburing/man/io_uring_prep_connect.3 +0 -66
  71. data/vendor/liburing/man/io_uring_prep_fadvise.3 +0 -59
  72. data/vendor/liburing/man/io_uring_prep_fallocate.3 +0 -59
  73. data/vendor/liburing/man/io_uring_prep_fgetxattr.3 +0 -1
  74. data/vendor/liburing/man/io_uring_prep_files_update.3 +0 -92
  75. data/vendor/liburing/man/io_uring_prep_fsetxattr.3 +0 -1
  76. data/vendor/liburing/man/io_uring_prep_fsync.3 +0 -70
  77. data/vendor/liburing/man/io_uring_prep_getxattr.3 +0 -61
  78. data/vendor/liburing/man/io_uring_prep_link.3 +0 -1
  79. data/vendor/liburing/man/io_uring_prep_link_timeout.3 +0 -94
  80. data/vendor/liburing/man/io_uring_prep_linkat.3 +0 -91
  81. data/vendor/liburing/man/io_uring_prep_madvise.3 +0 -56
  82. data/vendor/liburing/man/io_uring_prep_mkdir.3 +0 -1
  83. data/vendor/liburing/man/io_uring_prep_mkdirat.3 +0 -83
  84. data/vendor/liburing/man/io_uring_prep_msg_ring.3 +0 -92
  85. data/vendor/liburing/man/io_uring_prep_msg_ring_cqe_flags.3 +0 -1
  86. data/vendor/liburing/man/io_uring_prep_multishot_accept.3 +0 -1
  87. data/vendor/liburing/man/io_uring_prep_multishot_accept_direct.3 +0 -1
  88. data/vendor/liburing/man/io_uring_prep_nop.3 +0 -28
  89. data/vendor/liburing/man/io_uring_prep_openat.3 +0 -117
  90. data/vendor/liburing/man/io_uring_prep_openat2.3 +0 -117
  91. data/vendor/liburing/man/io_uring_prep_openat2_direct.3 +0 -1
  92. data/vendor/liburing/man/io_uring_prep_openat_direct.3 +0 -1
  93. data/vendor/liburing/man/io_uring_prep_poll_add.3 +0 -72
  94. data/vendor/liburing/man/io_uring_prep_poll_multishot.3 +0 -1
  95. data/vendor/liburing/man/io_uring_prep_poll_remove.3 +0 -55
  96. data/vendor/liburing/man/io_uring_prep_poll_update.3 +0 -89
  97. data/vendor/liburing/man/io_uring_prep_provide_buffers.3 +0 -140
  98. data/vendor/liburing/man/io_uring_prep_read.3 +0 -69
  99. data/vendor/liburing/man/io_uring_prep_read_fixed.3 +0 -72
  100. data/vendor/liburing/man/io_uring_prep_readv.3 +0 -85
  101. data/vendor/liburing/man/io_uring_prep_readv2.3 +0 -111
  102. data/vendor/liburing/man/io_uring_prep_recv.3 +0 -105
  103. data/vendor/liburing/man/io_uring_prep_recv_multishot.3 +0 -1
  104. data/vendor/liburing/man/io_uring_prep_recvmsg.3 +0 -124
  105. data/vendor/liburing/man/io_uring_prep_recvmsg_multishot.3 +0 -1
  106. data/vendor/liburing/man/io_uring_prep_remove_buffers.3 +0 -52
  107. data/vendor/liburing/man/io_uring_prep_rename.3 +0 -1
  108. data/vendor/liburing/man/io_uring_prep_renameat.3 +0 -96
  109. data/vendor/liburing/man/io_uring_prep_send.3 +0 -66
  110. data/vendor/liburing/man/io_uring_prep_send_set_addr.3 +0 -38
  111. data/vendor/liburing/man/io_uring_prep_send_zc.3 +0 -96
  112. data/vendor/liburing/man/io_uring_prep_send_zc_fixed.3 +0 -1
  113. data/vendor/liburing/man/io_uring_prep_sendmsg.3 +0 -89
  114. data/vendor/liburing/man/io_uring_prep_sendmsg_zc.3 +0 -1
  115. data/vendor/liburing/man/io_uring_prep_setxattr.3 +0 -64
  116. data/vendor/liburing/man/io_uring_prep_shutdown.3 +0 -53
  117. data/vendor/liburing/man/io_uring_prep_socket.3 +0 -118
  118. data/vendor/liburing/man/io_uring_prep_socket_direct.3 +0 -1
  119. data/vendor/liburing/man/io_uring_prep_socket_direct_alloc.3 +0 -1
  120. data/vendor/liburing/man/io_uring_prep_splice.3 +0 -120
  121. data/vendor/liburing/man/io_uring_prep_statx.3 +0 -74
  122. data/vendor/liburing/man/io_uring_prep_symlink.3 +0 -1
  123. data/vendor/liburing/man/io_uring_prep_symlinkat.3 +0 -85
  124. data/vendor/liburing/man/io_uring_prep_sync_file_range.3 +0 -59
  125. data/vendor/liburing/man/io_uring_prep_tee.3 +0 -74
  126. data/vendor/liburing/man/io_uring_prep_timeout.3 +0 -95
  127. data/vendor/liburing/man/io_uring_prep_timeout_remove.3 +0 -1
  128. data/vendor/liburing/man/io_uring_prep_timeout_update.3 +0 -98
  129. data/vendor/liburing/man/io_uring_prep_unlink.3 +0 -1
  130. data/vendor/liburing/man/io_uring_prep_unlinkat.3 +0 -82
  131. data/vendor/liburing/man/io_uring_prep_write.3 +0 -67
  132. data/vendor/liburing/man/io_uring_prep_write_fixed.3 +0 -72
  133. data/vendor/liburing/man/io_uring_prep_writev.3 +0 -85
  134. data/vendor/liburing/man/io_uring_prep_writev2.3 +0 -111
  135. data/vendor/liburing/man/io_uring_queue_exit.3 +0 -26
  136. data/vendor/liburing/man/io_uring_queue_init.3 +0 -89
  137. data/vendor/liburing/man/io_uring_queue_init_params.3 +0 -1
  138. data/vendor/liburing/man/io_uring_recvmsg_cmsg_firsthdr.3 +0 -1
  139. data/vendor/liburing/man/io_uring_recvmsg_cmsg_nexthdr.3 +0 -1
  140. data/vendor/liburing/man/io_uring_recvmsg_name.3 +0 -1
  141. data/vendor/liburing/man/io_uring_recvmsg_out.3 +0 -82
  142. data/vendor/liburing/man/io_uring_recvmsg_payload.3 +0 -1
  143. data/vendor/liburing/man/io_uring_recvmsg_payload_length.3 +0 -1
  144. data/vendor/liburing/man/io_uring_recvmsg_validate.3 +0 -1
  145. data/vendor/liburing/man/io_uring_register.2 +0 -834
  146. data/vendor/liburing/man/io_uring_register_buf_ring.3 +0 -140
  147. data/vendor/liburing/man/io_uring_register_buffers.3 +0 -104
  148. data/vendor/liburing/man/io_uring_register_buffers_sparse.3 +0 -1
  149. data/vendor/liburing/man/io_uring_register_buffers_tags.3 +0 -1
  150. data/vendor/liburing/man/io_uring_register_buffers_update_tag.3 +0 -1
  151. data/vendor/liburing/man/io_uring_register_eventfd.3 +0 -51
  152. data/vendor/liburing/man/io_uring_register_eventfd_async.3 +0 -1
  153. data/vendor/liburing/man/io_uring_register_file_alloc_range.3 +0 -52
  154. data/vendor/liburing/man/io_uring_register_files.3 +0 -112
  155. data/vendor/liburing/man/io_uring_register_files_sparse.3 +0 -1
  156. data/vendor/liburing/man/io_uring_register_files_tags.3 +0 -1
  157. data/vendor/liburing/man/io_uring_register_files_update.3 +0 -1
  158. data/vendor/liburing/man/io_uring_register_files_update_tag.3 +0 -1
  159. data/vendor/liburing/man/io_uring_register_iowq_aff.3 +0 -61
  160. data/vendor/liburing/man/io_uring_register_iowq_max_workers.3 +0 -71
  161. data/vendor/liburing/man/io_uring_register_ring_fd.3 +0 -49
  162. data/vendor/liburing/man/io_uring_register_sync_cancel.3 +0 -71
  163. data/vendor/liburing/man/io_uring_setup.2 +0 -669
  164. data/vendor/liburing/man/io_uring_sq_ready.3 +0 -31
  165. data/vendor/liburing/man/io_uring_sq_space_left.3 +0 -25
  166. data/vendor/liburing/man/io_uring_sqe_set_data.3 +0 -48
  167. data/vendor/liburing/man/io_uring_sqe_set_data64.3 +0 -1
  168. data/vendor/liburing/man/io_uring_sqe_set_flags.3 +0 -87
  169. data/vendor/liburing/man/io_uring_sqring_wait.3 +0 -34
  170. data/vendor/liburing/man/io_uring_submit.3 +0 -46
  171. data/vendor/liburing/man/io_uring_submit_and_get_events.3 +0 -31
  172. data/vendor/liburing/man/io_uring_submit_and_wait.3 +0 -38
  173. data/vendor/liburing/man/io_uring_submit_and_wait_timeout.3 +0 -56
  174. data/vendor/liburing/man/io_uring_unregister_buf_ring.3 +0 -30
  175. data/vendor/liburing/man/io_uring_unregister_buffers.3 +0 -27
  176. data/vendor/liburing/man/io_uring_unregister_eventfd.3 +0 -1
  177. data/vendor/liburing/man/io_uring_unregister_files.3 +0 -27
  178. data/vendor/liburing/man/io_uring_unregister_iowq_aff.3 +0 -1
  179. data/vendor/liburing/man/io_uring_unregister_ring_fd.3 +0 -32
  180. data/vendor/liburing/man/io_uring_wait_cqe.3 +0 -40
  181. data/vendor/liburing/man/io_uring_wait_cqe_nr.3 +0 -43
  182. data/vendor/liburing/man/io_uring_wait_cqe_timeout.3 +0 -53
  183. data/vendor/liburing/man/io_uring_wait_cqes.3 +0 -56
data/test/test_fiber.rb CHANGED
@@ -975,6 +975,50 @@ class MailboxTest < MiniTest::Test
975
975
  assert_equal ['foo'] * 100, messages
976
976
  end
977
977
 
978
+ def test_receive_loop
979
+ buffer = []
980
+ f = spin do
981
+ receive_loop { |msg| buffer << msg }
982
+ ensure
983
+ buffer << :done
984
+ end
985
+
986
+ snooze
987
+ f << :foo
988
+ snooze
989
+ assert_equal [:foo], buffer
990
+
991
+ f << :bar
992
+ snooze
993
+ assert_equal [:foo, :bar], buffer
994
+
995
+ f.kill
996
+ f.join
997
+ assert_equal [:foo, :bar, :done], buffer
998
+ end
999
+
1000
+ def test_receive_loop_break
1001
+ buffer = []
1002
+ f = spin do
1003
+ receive_loop do |msg|
1004
+ buffer << msg
1005
+ break if msg == :bar
1006
+ end
1007
+ buffer << :done
1008
+ end
1009
+
1010
+ snooze
1011
+ f << :foo
1012
+ snooze
1013
+ assert_equal [:foo], buffer
1014
+
1015
+ f << :bar
1016
+ snooze
1017
+ assert_equal [:foo, :bar, :done], buffer
1018
+
1019
+ assert_equal :dead, f.state
1020
+ end
1021
+
978
1022
  def test_receive_exception
979
1023
  e = RuntimeError.new 'foo'
980
1024
  spin { Fiber.current.parent << e }
@@ -1287,4 +1331,4 @@ class DebugTest < MiniTest::Test
1287
1331
  10.times { snooze }
1288
1332
  assert_equal [0, 1, 2], buf
1289
1333
  end
1290
- end
1334
+ end
data/test/test_io.rb CHANGED
@@ -321,11 +321,36 @@ class IOTest < MiniTest::Test
321
321
  assert_equal 6, len
322
322
  end
323
323
 
324
+ def test_splice_class_method_with_eof_detection
325
+ i1, o1 = IO.pipe
326
+ i2, o2 = IO.pipe
327
+ splice_lens = []
328
+
329
+ spin {
330
+ loop {
331
+ len = IO.splice(i1, o2, 1000)
332
+ splice_lens << len
333
+ break if len == 0
334
+ }
335
+
336
+ o2.close
337
+ }
338
+
339
+ o1.write('foobar')
340
+ snooze
341
+ o1.close
342
+
343
+ result = i2.read
344
+ assert_equal 'foobar', result
345
+ assert_equal [6, 0], splice_lens
346
+ end
347
+
324
348
  def test_splice_from_to_eof
325
349
  i1, o1 = IO.pipe
326
350
  i2, o2 = IO.pipe
327
351
  len = nil
328
352
 
353
+
329
354
  f = spin {
330
355
  len = o2.splice_from(i1, -1000)
331
356
  o2.close
@@ -672,6 +697,27 @@ class IOClassMethodsTest < MiniTest::Test
672
697
  assert_equal [:ready, 'foo', 'bar', :done], buf
673
698
  end
674
699
 
700
+ def test_read_loop_break
701
+ i, o = IO.pipe
702
+
703
+ buf = []
704
+ f = spin do
705
+ buf << :ready
706
+ i.read_loop do |d|
707
+ buf << d
708
+ break if d == 'bar'
709
+ end
710
+ buf << :done
711
+ end
712
+
713
+ # writing always causes snoozing
714
+ o << 'foo'
715
+ 3.times { snooze }
716
+ o << 'bar'
717
+ f.await
718
+ assert_equal [:ready, 'foo', 'bar', :done], buf
719
+ end
720
+
675
721
  def test_read_loop_with_max_len
676
722
  r, w = IO.pipe
677
723
 
@@ -72,4 +72,4 @@ class ProcessSupervisionTest < MiniTest::Test
72
72
  assert_equal "foo\n", IO.read(fn)
73
73
 
74
74
  end
75
- end
75
+ end
@@ -126,4 +126,4 @@ class ResourcePoolTest < MiniTest::Test
126
126
 
127
127
  assert_equal [1, 1, 1, 1], buf
128
128
  end
129
- end
129
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helper'
4
+
5
+ class ScenarioTest < MiniTest::Test
6
+ def test_monocrono
7
+ count = 256
8
+
9
+ workers = {}
10
+ count.times do |i|
11
+ factor = i + 1
12
+ workers[i] = spin_loop do
13
+ peer, num = receive
14
+ peer << (num * factor)
15
+ end
16
+ end
17
+
18
+ router = spin_loop do
19
+ peer, id, num = receive
20
+ worker = workers[id]
21
+ worker << [peer, num]
22
+ end
23
+
24
+ results = []
25
+ (count * 256).times do
26
+ id = rand(count)
27
+ num = rand(1000)
28
+ router << [Fiber.current, id, num]
29
+ result = receive
30
+ assert_equal num * (id + 1), result
31
+ end
32
+ ensure
33
+ workers.each_value do |w|
34
+ w.kill
35
+ w.join
36
+ end
37
+ end
38
+ end
data/test/test_socket.rb CHANGED
@@ -75,7 +75,7 @@ class TCPSocketTest < MiniTest::Test
75
75
  server_fiber = spin do
76
76
  while (socket = server.accept)
77
77
  spin do
78
- while (data = socket.read(8192))
78
+ while (data = socket.readpartial(8192))
79
79
  socket << data
80
80
  end
81
81
  end
@@ -477,5 +477,4 @@ class MultishotAcceptTest < MiniTest::Test
477
477
  server_fiber.await
478
478
  assert_kind_of Errno::EBADF, error
479
479
  end
480
-
481
480
  end
@@ -25,7 +25,9 @@ class ThreadPoolTest < MiniTest::Test
25
25
  threads = []
26
26
  results = []
27
27
 
28
- 20.times do |i|
28
+ count = 40
29
+
30
+ count.times do |i|
29
31
  spin do
30
32
  results << @pool.process do
31
33
  threads << Thread.current
@@ -38,7 +40,7 @@ class ThreadPoolTest < MiniTest::Test
38
40
  suspend
39
41
 
40
42
  assert_equal @pool.size, threads.uniq.size
41
- assert_equal (0..19).map { |i| i * 10}, results.sort
43
+ assert_equal (0..(count - 1)).map { |i| i * 10}, results.sort
42
44
  end
43
45
 
44
46
  def test_process_with_exception
data/test/test_timer.rb CHANGED
@@ -50,7 +50,7 @@ class TimerMoveOnAfterTest < MiniTest::Test
50
50
  t1 = Time.now
51
51
 
52
52
  assert_nil v
53
- assert_in_range 0.15..0.4, t1 - t0
53
+ assert_in_range 0.12..0.4, t1 - t0
54
54
  end
55
55
  end
56
56
 
@@ -162,4 +162,4 @@ class TimerMiscTest < MiniTest::Test
162
162
  f.stop
163
163
  assert_in_range 3..7, buffer.size if IS_LINUX
164
164
  end
165
- end
165
+ end
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.0.1
4
+ version: '1.1'
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-05-14 00:00:00.000000000 Z
11
+ date: 2023-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -122,6 +122,34 @@ dependencies:
122
122
  - - '='
123
123
  - !ruby/object:Gem::Version
124
124
  version: 1.1.10
125
+ - !ruby/object:Gem::Dependency
126
+ name: debug
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 1.8.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 1.8.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: benchmark-ips
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '='
144
+ - !ruby/object:Gem::Version
145
+ version: 2.10.0
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '='
151
+ - !ruby/object:Gem::Version
152
+ version: 2.10.0
125
153
  description:
126
154
  email: sharon@noteflakes.com
127
155
  executables: []
@@ -151,6 +179,7 @@ files:
151
179
  - docs/_user-guide/all-about-timers.md
152
180
  - docs/_user-guide/index.md
153
181
  - docs/_user-guide/web-server.md
182
+ - docs/advanced-io.md
154
183
  - docs/assets/echo-fibers.svg
155
184
  - docs/assets/polyphony-logo.png
156
185
  - docs/assets/sleeping-fiber.svg
@@ -182,6 +211,7 @@ files:
182
211
  - examples/core/calc_with_restart.rb
183
212
  - examples/core/calc_with_supervise.rb
184
213
  - examples/core/channels.rb
214
+ - examples/core/debug.rb
185
215
  - examples/core/deferring-an-operation.rb
186
216
  - examples/core/enumerable.rb
187
217
  - examples/core/erlang-style-genserver.rb
@@ -198,15 +228,18 @@ files:
198
228
  - examples/core/recurrent-timer.rb
199
229
  - examples/core/resource_delegate.rb
200
230
  - examples/core/ring.rb
231
+ - examples/core/rpc_benchmark.rb
201
232
  - examples/core/shutdown_all_children.rb
202
233
  - examples/core/spin.rb
203
234
  - examples/core/spin_error_backtrace.rb
235
+ - examples/core/stream_mockup.rb
204
236
  - examples/core/supervise-process.rb
205
237
  - examples/core/supervisor.rb
206
238
  - examples/core/suspend.rb
207
239
  - examples/core/terminate_main_fiber.rb
208
240
  - examples/core/thread-sleep.rb
209
241
  - examples/core/thread_pool.rb
242
+ - examples/core/throttled_loop_inside_move_on_after.rb
210
243
  - examples/core/throttling.rb
211
244
  - examples/core/timeout.rb
212
245
  - examples/core/trap1.rb
@@ -374,6 +407,7 @@ files:
374
407
  - test/test_queue.rb
375
408
  - test/test_raw_buffer.rb
376
409
  - test/test_resource_pool.rb
410
+ - test/test_scenarios.rb
377
411
  - test/test_signal.rb
378
412
  - test/test_socket.rb
379
413
  - test/test_supervise.rb
@@ -425,153 +459,6 @@ files:
425
459
  - vendor/liburing/liburing.pc.in
426
460
  - vendor/liburing/liburing.spec
427
461
  - vendor/liburing/make-debs.sh
428
- - vendor/liburing/man/IO_URING_CHECK_VERSION.3
429
- - vendor/liburing/man/IO_URING_VERSION_MAJOR.3
430
- - vendor/liburing/man/IO_URING_VERSION_MINOR.3
431
- - vendor/liburing/man/io_uring.7
432
- - vendor/liburing/man/io_uring_buf_ring_add.3
433
- - vendor/liburing/man/io_uring_buf_ring_advance.3
434
- - vendor/liburing/man/io_uring_buf_ring_cq_advance.3
435
- - vendor/liburing/man/io_uring_buf_ring_init.3
436
- - vendor/liburing/man/io_uring_buf_ring_mask.3
437
- - vendor/liburing/man/io_uring_check_version.3
438
- - vendor/liburing/man/io_uring_close_ring_fd.3
439
- - vendor/liburing/man/io_uring_cq_advance.3
440
- - vendor/liburing/man/io_uring_cq_has_overflow.3
441
- - vendor/liburing/man/io_uring_cq_ready.3
442
- - vendor/liburing/man/io_uring_cqe_get_data.3
443
- - vendor/liburing/man/io_uring_cqe_get_data64.3
444
- - vendor/liburing/man/io_uring_cqe_seen.3
445
- - vendor/liburing/man/io_uring_enter.2
446
- - vendor/liburing/man/io_uring_enter2.2
447
- - vendor/liburing/man/io_uring_free_probe.3
448
- - vendor/liburing/man/io_uring_get_events.3
449
- - vendor/liburing/man/io_uring_get_probe.3
450
- - vendor/liburing/man/io_uring_get_sqe.3
451
- - vendor/liburing/man/io_uring_major_version.3
452
- - vendor/liburing/man/io_uring_minor_version.3
453
- - vendor/liburing/man/io_uring_opcode_supported.3
454
- - vendor/liburing/man/io_uring_peek_cqe.3
455
- - vendor/liburing/man/io_uring_prep_accept.3
456
- - vendor/liburing/man/io_uring_prep_accept_direct.3
457
- - vendor/liburing/man/io_uring_prep_cancel.3
458
- - vendor/liburing/man/io_uring_prep_cancel64.3
459
- - vendor/liburing/man/io_uring_prep_close.3
460
- - vendor/liburing/man/io_uring_prep_close_direct.3
461
- - vendor/liburing/man/io_uring_prep_connect.3
462
- - vendor/liburing/man/io_uring_prep_fadvise.3
463
- - vendor/liburing/man/io_uring_prep_fallocate.3
464
- - vendor/liburing/man/io_uring_prep_fgetxattr.3
465
- - vendor/liburing/man/io_uring_prep_files_update.3
466
- - vendor/liburing/man/io_uring_prep_fsetxattr.3
467
- - vendor/liburing/man/io_uring_prep_fsync.3
468
- - vendor/liburing/man/io_uring_prep_getxattr.3
469
- - vendor/liburing/man/io_uring_prep_link.3
470
- - vendor/liburing/man/io_uring_prep_link_timeout.3
471
- - vendor/liburing/man/io_uring_prep_linkat.3
472
- - vendor/liburing/man/io_uring_prep_madvise.3
473
- - vendor/liburing/man/io_uring_prep_mkdir.3
474
- - vendor/liburing/man/io_uring_prep_mkdirat.3
475
- - vendor/liburing/man/io_uring_prep_msg_ring.3
476
- - vendor/liburing/man/io_uring_prep_msg_ring_cqe_flags.3
477
- - vendor/liburing/man/io_uring_prep_multishot_accept.3
478
- - vendor/liburing/man/io_uring_prep_multishot_accept_direct.3
479
- - vendor/liburing/man/io_uring_prep_nop.3
480
- - vendor/liburing/man/io_uring_prep_openat.3
481
- - vendor/liburing/man/io_uring_prep_openat2.3
482
- - vendor/liburing/man/io_uring_prep_openat2_direct.3
483
- - vendor/liburing/man/io_uring_prep_openat_direct.3
484
- - vendor/liburing/man/io_uring_prep_poll_add.3
485
- - vendor/liburing/man/io_uring_prep_poll_multishot.3
486
- - vendor/liburing/man/io_uring_prep_poll_remove.3
487
- - vendor/liburing/man/io_uring_prep_poll_update.3
488
- - vendor/liburing/man/io_uring_prep_provide_buffers.3
489
- - vendor/liburing/man/io_uring_prep_read.3
490
- - vendor/liburing/man/io_uring_prep_read_fixed.3
491
- - vendor/liburing/man/io_uring_prep_readv.3
492
- - vendor/liburing/man/io_uring_prep_readv2.3
493
- - vendor/liburing/man/io_uring_prep_recv.3
494
- - vendor/liburing/man/io_uring_prep_recv_multishot.3
495
- - vendor/liburing/man/io_uring_prep_recvmsg.3
496
- - vendor/liburing/man/io_uring_prep_recvmsg_multishot.3
497
- - vendor/liburing/man/io_uring_prep_remove_buffers.3
498
- - vendor/liburing/man/io_uring_prep_rename.3
499
- - vendor/liburing/man/io_uring_prep_renameat.3
500
- - vendor/liburing/man/io_uring_prep_send.3
501
- - vendor/liburing/man/io_uring_prep_send_set_addr.3
502
- - vendor/liburing/man/io_uring_prep_send_zc.3
503
- - vendor/liburing/man/io_uring_prep_send_zc_fixed.3
504
- - vendor/liburing/man/io_uring_prep_sendmsg.3
505
- - vendor/liburing/man/io_uring_prep_sendmsg_zc.3
506
- - vendor/liburing/man/io_uring_prep_setxattr.3
507
- - vendor/liburing/man/io_uring_prep_shutdown.3
508
- - vendor/liburing/man/io_uring_prep_socket.3
509
- - vendor/liburing/man/io_uring_prep_socket_direct.3
510
- - vendor/liburing/man/io_uring_prep_socket_direct_alloc.3
511
- - vendor/liburing/man/io_uring_prep_splice.3
512
- - vendor/liburing/man/io_uring_prep_statx.3
513
- - vendor/liburing/man/io_uring_prep_symlink.3
514
- - vendor/liburing/man/io_uring_prep_symlinkat.3
515
- - vendor/liburing/man/io_uring_prep_sync_file_range.3
516
- - vendor/liburing/man/io_uring_prep_tee.3
517
- - vendor/liburing/man/io_uring_prep_timeout.3
518
- - vendor/liburing/man/io_uring_prep_timeout_remove.3
519
- - vendor/liburing/man/io_uring_prep_timeout_update.3
520
- - vendor/liburing/man/io_uring_prep_unlink.3
521
- - vendor/liburing/man/io_uring_prep_unlinkat.3
522
- - vendor/liburing/man/io_uring_prep_write.3
523
- - vendor/liburing/man/io_uring_prep_write_fixed.3
524
- - vendor/liburing/man/io_uring_prep_writev.3
525
- - vendor/liburing/man/io_uring_prep_writev2.3
526
- - vendor/liburing/man/io_uring_queue_exit.3
527
- - vendor/liburing/man/io_uring_queue_init.3
528
- - vendor/liburing/man/io_uring_queue_init_params.3
529
- - vendor/liburing/man/io_uring_recvmsg_cmsg_firsthdr.3
530
- - vendor/liburing/man/io_uring_recvmsg_cmsg_nexthdr.3
531
- - vendor/liburing/man/io_uring_recvmsg_name.3
532
- - vendor/liburing/man/io_uring_recvmsg_out.3
533
- - vendor/liburing/man/io_uring_recvmsg_payload.3
534
- - vendor/liburing/man/io_uring_recvmsg_payload_length.3
535
- - vendor/liburing/man/io_uring_recvmsg_validate.3
536
- - vendor/liburing/man/io_uring_register.2
537
- - vendor/liburing/man/io_uring_register_buf_ring.3
538
- - vendor/liburing/man/io_uring_register_buffers.3
539
- - vendor/liburing/man/io_uring_register_buffers_sparse.3
540
- - vendor/liburing/man/io_uring_register_buffers_tags.3
541
- - vendor/liburing/man/io_uring_register_buffers_update_tag.3
542
- - vendor/liburing/man/io_uring_register_eventfd.3
543
- - vendor/liburing/man/io_uring_register_eventfd_async.3
544
- - vendor/liburing/man/io_uring_register_file_alloc_range.3
545
- - vendor/liburing/man/io_uring_register_files.3
546
- - vendor/liburing/man/io_uring_register_files_sparse.3
547
- - vendor/liburing/man/io_uring_register_files_tags.3
548
- - vendor/liburing/man/io_uring_register_files_update.3
549
- - vendor/liburing/man/io_uring_register_files_update_tag.3
550
- - vendor/liburing/man/io_uring_register_iowq_aff.3
551
- - vendor/liburing/man/io_uring_register_iowq_max_workers.3
552
- - vendor/liburing/man/io_uring_register_ring_fd.3
553
- - vendor/liburing/man/io_uring_register_sync_cancel.3
554
- - vendor/liburing/man/io_uring_setup.2
555
- - vendor/liburing/man/io_uring_sq_ready.3
556
- - vendor/liburing/man/io_uring_sq_space_left.3
557
- - vendor/liburing/man/io_uring_sqe_set_data.3
558
- - vendor/liburing/man/io_uring_sqe_set_data64.3
559
- - vendor/liburing/man/io_uring_sqe_set_flags.3
560
- - vendor/liburing/man/io_uring_sqring_wait.3
561
- - vendor/liburing/man/io_uring_submit.3
562
- - vendor/liburing/man/io_uring_submit_and_get_events.3
563
- - vendor/liburing/man/io_uring_submit_and_wait.3
564
- - vendor/liburing/man/io_uring_submit_and_wait_timeout.3
565
- - vendor/liburing/man/io_uring_unregister_buf_ring.3
566
- - vendor/liburing/man/io_uring_unregister_buffers.3
567
- - vendor/liburing/man/io_uring_unregister_eventfd.3
568
- - vendor/liburing/man/io_uring_unregister_files.3
569
- - vendor/liburing/man/io_uring_unregister_iowq_aff.3
570
- - vendor/liburing/man/io_uring_unregister_ring_fd.3
571
- - vendor/liburing/man/io_uring_wait_cqe.3
572
- - vendor/liburing/man/io_uring_wait_cqe_nr.3
573
- - vendor/liburing/man/io_uring_wait_cqe_timeout.3
574
- - vendor/liburing/man/io_uring_wait_cqes.3
575
462
  - vendor/liburing/src/Makefile
576
463
  - vendor/liburing/src/arch/aarch64/lib.h
577
464
  - vendor/liburing/src/arch/aarch64/syscall.h
@@ -1 +0,0 @@
1
- io_uring_check_version.3
@@ -1 +0,0 @@
1
- io_uring_check_version.3
@@ -1 +0,0 @@
1
- io_uring_check_version.3