itsi 0.1.9 → 0.1.12

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.
Files changed (294) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +1542 -43
  3. data/Itsi.rb +125 -0
  4. data/Rakefile +8 -4
  5. data/crates/itsi_error/src/lib.rs +9 -0
  6. data/crates/itsi_rb_helpers/Cargo.toml +1 -0
  7. data/crates/itsi_rb_helpers/src/heap_value.rs +18 -0
  8. data/crates/itsi_rb_helpers/src/lib.rs +59 -9
  9. data/crates/itsi_server/Cargo.toml +70 -28
  10. data/crates/itsi_server/src/lib.rs +80 -80
  11. data/crates/itsi_server/src/{body_proxy → ruby_types/itsi_body_proxy}/big_bytes.rs +10 -5
  12. data/{gems/server/ext/itsi_server/src/body_proxy/itsi_body_proxy.rs → crates/itsi_server/src/ruby_types/itsi_body_proxy/mod.rs} +22 -3
  13. data/crates/itsi_server/src/ruby_types/itsi_grpc_request.rs +147 -0
  14. data/crates/itsi_server/src/ruby_types/itsi_grpc_response.rs +19 -0
  15. data/crates/itsi_server/src/ruby_types/itsi_grpc_stream/mod.rs +216 -0
  16. data/crates/itsi_server/src/ruby_types/itsi_http_request.rs +282 -0
  17. data/crates/itsi_server/src/{response/itsi_response.rs → ruby_types/itsi_http_response.rs} +72 -41
  18. data/crates/itsi_server/src/ruby_types/itsi_server/file_watcher.rs +225 -0
  19. data/crates/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +355 -0
  20. data/crates/itsi_server/src/ruby_types/itsi_server.rs +82 -0
  21. data/crates/itsi_server/src/ruby_types/mod.rs +55 -0
  22. data/crates/itsi_server/src/server/bind.rs +29 -17
  23. data/crates/itsi_server/src/server/byte_frame.rs +32 -0
  24. data/crates/itsi_server/src/server/cache_store.rs +74 -0
  25. data/crates/itsi_server/src/server/itsi_service.rs +172 -0
  26. data/crates/itsi_server/src/server/lifecycle_event.rs +3 -0
  27. data/crates/itsi_server/src/server/listener.rs +111 -11
  28. data/crates/itsi_server/src/server/middleware_stack/middleware.rs +153 -0
  29. data/crates/itsi_server/src/server/middleware_stack/middlewares/allow_list.rs +47 -0
  30. data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_api_key.rs +58 -0
  31. data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs +82 -0
  32. data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +321 -0
  33. data/crates/itsi_server/src/server/middleware_stack/middlewares/cache_control.rs +139 -0
  34. data/crates/itsi_server/src/server/middleware_stack/middlewares/compression.rs +300 -0
  35. data/crates/itsi_server/src/server/middleware_stack/middlewares/cors.rs +287 -0
  36. data/crates/itsi_server/src/server/middleware_stack/middlewares/deny_list.rs +48 -0
  37. data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +127 -0
  38. data/crates/itsi_server/src/server/middleware_stack/middlewares/etag.rs +191 -0
  39. data/crates/itsi_server/src/server/middleware_stack/middlewares/grpc_service.rs +72 -0
  40. data/crates/itsi_server/src/server/middleware_stack/middlewares/header_interpretation.rs +85 -0
  41. data/crates/itsi_server/src/server/middleware_stack/middlewares/intrusion_protection.rs +195 -0
  42. data/crates/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +82 -0
  43. data/crates/itsi_server/src/server/middleware_stack/middlewares/mod.rs +82 -0
  44. data/crates/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +216 -0
  45. data/crates/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +124 -0
  46. data/crates/itsi_server/src/server/middleware_stack/middlewares/redirect.rs +76 -0
  47. data/crates/itsi_server/src/server/middleware_stack/middlewares/request_headers.rs +43 -0
  48. data/crates/itsi_server/src/server/middleware_stack/middlewares/response_headers.rs +34 -0
  49. data/crates/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +93 -0
  50. data/crates/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +162 -0
  51. data/crates/itsi_server/src/server/middleware_stack/middlewares/string_rewrite.rs +158 -0
  52. data/crates/itsi_server/src/server/middleware_stack/middlewares/token_source.rs +12 -0
  53. data/crates/itsi_server/src/server/middleware_stack/mod.rs +315 -0
  54. data/crates/itsi_server/src/server/mod.rs +8 -1
  55. data/crates/itsi_server/src/server/process_worker.rs +44 -11
  56. data/crates/itsi_server/src/server/rate_limiter.rs +565 -0
  57. data/crates/itsi_server/src/server/request_job.rs +11 -0
  58. data/crates/itsi_server/src/server/serve_strategy/cluster_mode.rs +129 -46
  59. data/crates/itsi_server/src/server/serve_strategy/mod.rs +9 -6
  60. data/crates/itsi_server/src/server/serve_strategy/single_mode.rs +325 -167
  61. data/crates/itsi_server/src/server/signal.rs +20 -4
  62. data/crates/itsi_server/src/server/static_file_server.rs +984 -0
  63. data/crates/itsi_server/src/server/thread_worker.rs +165 -88
  64. data/crates/itsi_server/src/server/tls.rs +1 -1
  65. data/crates/itsi_server/src/server/types.rs +43 -0
  66. data/crates/itsi_server/test.md +14 -0
  67. data/crates/itsi_tracing/Cargo.toml +1 -0
  68. data/crates/itsi_tracing/src/lib.rs +216 -45
  69. data/docs/.gitignore +7 -0
  70. data/docs/.gitpod.yml +15 -0
  71. data/docs/Itsi.rb +17 -0
  72. data/docs/content/_index.md +17 -0
  73. data/docs/content/about.md +6 -0
  74. data/docs/content/docs/_index.md +18 -0
  75. data/docs/content/docs/first-page.md +9 -0
  76. data/docs/content/docs/folder/_index.md +10 -0
  77. data/docs/content/docs/folder/leaf.md +7 -0
  78. data/docs/go.mod +5 -0
  79. data/docs/go.sum +2 -0
  80. data/docs/hugo.yaml +77 -0
  81. data/examples/static_assets_example.rb +83 -0
  82. data/gems/_index.md +18 -0
  83. data/gems/scheduler/CODE_OF_CONDUCT.md +7 -0
  84. data/gems/scheduler/Cargo.lock +75 -14
  85. data/gems/scheduler/README.md +5 -0
  86. data/gems/scheduler/_index.md +7 -0
  87. data/gems/scheduler/itsi-scheduler.gemspec +4 -1
  88. data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
  89. data/gems/scheduler/lib/itsi/scheduler.rb +2 -2
  90. data/gems/scheduler/test/test_file_io.rb +0 -1
  91. data/gems/scheduler/test/test_itsi_scheduler.rb +1 -1
  92. data/gems/server/CHANGELOG.md +5 -0
  93. data/gems/server/CODE_OF_CONDUCT.md +7 -0
  94. data/gems/server/Cargo.lock +1543 -43
  95. data/gems/server/README.md +4 -0
  96. data/gems/server/_index.md +6 -0
  97. data/gems/server/exe/itsi +46 -57
  98. data/gems/server/itsi-server.gemspec +3 -2
  99. data/gems/server/lib/itsi/{request.rb → http_request.rb} +29 -5
  100. data/gems/server/lib/itsi/http_response.rb +39 -0
  101. data/gems/server/lib/itsi/server/Itsi.rb +119 -0
  102. data/gems/server/lib/itsi/server/config/dsl.rb +506 -0
  103. data/gems/server/lib/itsi/server/config.rb +131 -0
  104. data/gems/server/lib/itsi/server/default_app/default_app.rb +38 -0
  105. data/gems/server/lib/itsi/server/grpc_interface.rb +213 -0
  106. data/gems/server/lib/itsi/server/rack/handler/itsi.rb +9 -6
  107. data/gems/server/lib/itsi/server/rack_interface.rb +24 -9
  108. data/gems/server/lib/itsi/server/scheduler_interface.rb +1 -1
  109. data/gems/server/lib/itsi/server/scheduler_mode.rb +4 -0
  110. data/gems/server/lib/itsi/server/signal_trap.rb +6 -1
  111. data/gems/server/lib/itsi/server/version.rb +1 -1
  112. data/gems/server/lib/itsi/server.rb +75 -60
  113. data/gems/server/lib/itsi/standard_headers.rb +86 -0
  114. data/gems/server/test/helpers/test_helper.rb +14 -12
  115. data/gems/server/test/test_itsi_server.rb +21 -2
  116. data/lib/itsi/version.rb +1 -1
  117. data/sandbox/itsi_file/Gemfile +11 -0
  118. data/sandbox/itsi_file/Gemfile.lock +69 -0
  119. data/sandbox/itsi_file/Itsi.rb +276 -0
  120. data/sandbox/itsi_file/error.html +2 -0
  121. data/sandbox/itsi_file/organisations_controller.rb +20 -0
  122. data/sandbox/itsi_file/public/assets/image.png +0 -0
  123. data/sandbox/itsi_file/public/assets/index.html +1 -0
  124. data/sandbox/itsi_sandbox_async/Gemfile +1 -1
  125. data/sandbox/itsi_sandbox_hanami/Gemfile.lock +2 -2
  126. data/sandbox/itsi_sandbox_rack/Gemfile.lock +2 -2
  127. data/sandbox/itsi_sandbox_rack/config.ru +2 -15
  128. data/sandbox/itsi_sandbox_rails/.dockerignore +2 -5
  129. data/sandbox/itsi_sandbox_rails/.github/workflows/ci.yml +1 -1
  130. data/sandbox/itsi_sandbox_rails/.gitignore +2 -1
  131. data/sandbox/itsi_sandbox_rails/Dockerfile +6 -9
  132. data/sandbox/itsi_sandbox_rails/Gemfile +16 -22
  133. data/sandbox/itsi_sandbox_rails/Gemfile.lock +100 -225
  134. data/sandbox/itsi_sandbox_rails/app/assets/config/manifest.js +4 -0
  135. data/sandbox/itsi_sandbox_rails/app/assets/stylesheets/application.css +11 -6
  136. data/sandbox/itsi_sandbox_rails/app/channels/application_cable/channel.rb +4 -0
  137. data/sandbox/itsi_sandbox_rails/app/channels/application_cable/connection.rb +4 -0
  138. data/sandbox/itsi_sandbox_rails/app/controllers/live_controller.rb +7 -8
  139. data/sandbox/itsi_sandbox_rails/app/controllers/uploads_controller.rb +0 -3
  140. data/sandbox/itsi_sandbox_rails/app/views/layouts/application.html.erb +2 -7
  141. data/sandbox/itsi_sandbox_rails/bin/docker-entrypoint +3 -4
  142. data/sandbox/itsi_sandbox_rails/bin/setup +8 -5
  143. data/sandbox/itsi_sandbox_rails/config/application.rb +1 -35
  144. data/sandbox/itsi_sandbox_rails/config/cable.yml +3 -10
  145. data/sandbox/itsi_sandbox_rails/config/credentials.yml.enc +1 -1
  146. data/sandbox/itsi_sandbox_rails/config/database.yml +9 -19
  147. data/sandbox/itsi_sandbox_rails/config/environment.rb +1 -1
  148. data/sandbox/itsi_sandbox_rails/config/environments/development.rb +21 -12
  149. data/sandbox/itsi_sandbox_rails/config/environments/production.rb +49 -34
  150. data/sandbox/itsi_sandbox_rails/config/environments/test.rb +19 -5
  151. data/sandbox/itsi_sandbox_rails/config/initializers/assets.rb +5 -0
  152. data/sandbox/itsi_sandbox_rails/config/initializers/filter_parameter_logging.rb +1 -1
  153. data/sandbox/itsi_sandbox_rails/config/initializers/permissions_policy.rb +13 -0
  154. data/sandbox/itsi_sandbox_rails/config/puma.rb +2 -9
  155. data/sandbox/itsi_sandbox_rails/config.ru +0 -1
  156. data/sandbox/itsi_sandbox_rails/db/migrate/20250301041554_create_posts.rb +1 -1
  157. data/sandbox/itsi_sandbox_rails/db/schema.rb +2 -2
  158. data/sandbox/itsi_sandbox_rails/lib/assets/.keep +0 -0
  159. data/sandbox/itsi_sandbox_rails/public/404.html +66 -113
  160. data/sandbox/itsi_sandbox_rails/public/406-unsupported-browser.html +65 -113
  161. data/sandbox/itsi_sandbox_rails/public/422.html +66 -113
  162. data/sandbox/itsi_sandbox_rails/public/500.html +65 -113
  163. data/sandbox/itsi_sandbox_rails/public/icon.png +0 -0
  164. data/sandbox/itsi_sandbox_rails/public/icon.svg +2 -2
  165. data/sandbox/itsi_sandbox_rails/test/channels/application_cable/connection_test.rb +13 -0
  166. data/sandbox/itsi_sandbox_roda/Gemfile.lock +3 -10
  167. data/tasks.txt +72 -12
  168. metadata +94 -139
  169. data/crates/itsi_server/src/body_proxy/itsi_body_proxy.rs +0 -122
  170. data/crates/itsi_server/src/body_proxy/mod.rs +0 -2
  171. data/crates/itsi_server/src/request/itsi_request.rs +0 -305
  172. data/crates/itsi_server/src/request/mod.rs +0 -1
  173. data/crates/itsi_server/src/response/mod.rs +0 -1
  174. data/crates/itsi_server/src/server/itsi_server.rs +0 -294
  175. data/gems/scheduler/ext/itsi_error/Cargo.lock +0 -368
  176. data/gems/scheduler/ext/itsi_error/Cargo.toml +0 -11
  177. data/gems/scheduler/ext/itsi_error/src/from.rs +0 -68
  178. data/gems/scheduler/ext/itsi_error/src/lib.rs +0 -24
  179. data/gems/scheduler/ext/itsi_instrument_entry/Cargo.toml +0 -15
  180. data/gems/scheduler/ext/itsi_instrument_entry/src/lib.rs +0 -31
  181. data/gems/scheduler/ext/itsi_rb_helpers/Cargo.lock +0 -355
  182. data/gems/scheduler/ext/itsi_rb_helpers/Cargo.toml +0 -10
  183. data/gems/scheduler/ext/itsi_rb_helpers/src/heap_value.rs +0 -121
  184. data/gems/scheduler/ext/itsi_rb_helpers/src/lib.rs +0 -178
  185. data/gems/scheduler/ext/itsi_scheduler/Cargo.toml +0 -24
  186. data/gems/scheduler/ext/itsi_scheduler/extconf.rb +0 -6
  187. data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler/io_helpers.rs +0 -56
  188. data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler/io_waiter.rs +0 -44
  189. data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler/timer.rs +0 -44
  190. data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler.rs +0 -308
  191. data/gems/scheduler/ext/itsi_scheduler/src/lib.rs +0 -38
  192. data/gems/scheduler/ext/itsi_server/Cargo.lock +0 -2956
  193. data/gems/scheduler/ext/itsi_server/Cargo.toml +0 -47
  194. data/gems/scheduler/ext/itsi_server/extconf.rb +0 -6
  195. data/gems/scheduler/ext/itsi_server/src/body_proxy/big_bytes.rs +0 -104
  196. data/gems/scheduler/ext/itsi_server/src/body_proxy/itsi_body_proxy.rs +0 -122
  197. data/gems/scheduler/ext/itsi_server/src/body_proxy/mod.rs +0 -2
  198. data/gems/scheduler/ext/itsi_server/src/env.rs +0 -43
  199. data/gems/scheduler/ext/itsi_server/src/lib.rs +0 -112
  200. data/gems/scheduler/ext/itsi_server/src/request/itsi_request.rs +0 -305
  201. data/gems/scheduler/ext/itsi_server/src/request/mod.rs +0 -1
  202. data/gems/scheduler/ext/itsi_server/src/response/itsi_response.rs +0 -357
  203. data/gems/scheduler/ext/itsi_server/src/response/mod.rs +0 -1
  204. data/gems/scheduler/ext/itsi_server/src/server/bind.rs +0 -170
  205. data/gems/scheduler/ext/itsi_server/src/server/bind_protocol.rs +0 -37
  206. data/gems/scheduler/ext/itsi_server/src/server/io_stream.rs +0 -104
  207. data/gems/scheduler/ext/itsi_server/src/server/itsi_server.rs +0 -294
  208. data/gems/scheduler/ext/itsi_server/src/server/lifecycle_event.rs +0 -9
  209. data/gems/scheduler/ext/itsi_server/src/server/listener.rs +0 -318
  210. data/gems/scheduler/ext/itsi_server/src/server/mod.rs +0 -11
  211. data/gems/scheduler/ext/itsi_server/src/server/process_worker.rs +0 -196
  212. data/gems/scheduler/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +0 -254
  213. data/gems/scheduler/ext/itsi_server/src/server/serve_strategy/mod.rs +0 -27
  214. data/gems/scheduler/ext/itsi_server/src/server/serve_strategy/single_mode.rs +0 -263
  215. data/gems/scheduler/ext/itsi_server/src/server/signal.rs +0 -77
  216. data/gems/scheduler/ext/itsi_server/src/server/thread_worker.rs +0 -367
  217. data/gems/scheduler/ext/itsi_server/src/server/tls/locked_dir_cache.rs +0 -132
  218. data/gems/scheduler/ext/itsi_server/src/server/tls.rs +0 -265
  219. data/gems/scheduler/ext/itsi_tracing/Cargo.lock +0 -274
  220. data/gems/scheduler/ext/itsi_tracing/Cargo.toml +0 -16
  221. data/gems/scheduler/ext/itsi_tracing/src/lib.rs +0 -58
  222. data/gems/server/ext/itsi_error/Cargo.lock +0 -368
  223. data/gems/server/ext/itsi_error/Cargo.toml +0 -11
  224. data/gems/server/ext/itsi_error/src/from.rs +0 -68
  225. data/gems/server/ext/itsi_error/src/lib.rs +0 -24
  226. data/gems/server/ext/itsi_instrument_entry/Cargo.toml +0 -15
  227. data/gems/server/ext/itsi_instrument_entry/src/lib.rs +0 -31
  228. data/gems/server/ext/itsi_rb_helpers/Cargo.lock +0 -355
  229. data/gems/server/ext/itsi_rb_helpers/Cargo.toml +0 -10
  230. data/gems/server/ext/itsi_rb_helpers/src/heap_value.rs +0 -121
  231. data/gems/server/ext/itsi_rb_helpers/src/lib.rs +0 -178
  232. data/gems/server/ext/itsi_scheduler/Cargo.toml +0 -24
  233. data/gems/server/ext/itsi_scheduler/extconf.rb +0 -6
  234. data/gems/server/ext/itsi_scheduler/src/itsi_scheduler/io_helpers.rs +0 -56
  235. data/gems/server/ext/itsi_scheduler/src/itsi_scheduler/io_waiter.rs +0 -44
  236. data/gems/server/ext/itsi_scheduler/src/itsi_scheduler/timer.rs +0 -44
  237. data/gems/server/ext/itsi_scheduler/src/itsi_scheduler.rs +0 -308
  238. data/gems/server/ext/itsi_scheduler/src/lib.rs +0 -38
  239. data/gems/server/ext/itsi_server/Cargo.lock +0 -2956
  240. data/gems/server/ext/itsi_server/Cargo.toml +0 -47
  241. data/gems/server/ext/itsi_server/extconf.rb +0 -6
  242. data/gems/server/ext/itsi_server/src/body_proxy/big_bytes.rs +0 -104
  243. data/gems/server/ext/itsi_server/src/body_proxy/mod.rs +0 -2
  244. data/gems/server/ext/itsi_server/src/env.rs +0 -43
  245. data/gems/server/ext/itsi_server/src/lib.rs +0 -112
  246. data/gems/server/ext/itsi_server/src/request/itsi_request.rs +0 -305
  247. data/gems/server/ext/itsi_server/src/request/mod.rs +0 -1
  248. data/gems/server/ext/itsi_server/src/response/itsi_response.rs +0 -357
  249. data/gems/server/ext/itsi_server/src/response/mod.rs +0 -1
  250. data/gems/server/ext/itsi_server/src/server/bind.rs +0 -170
  251. data/gems/server/ext/itsi_server/src/server/bind_protocol.rs +0 -37
  252. data/gems/server/ext/itsi_server/src/server/io_stream.rs +0 -104
  253. data/gems/server/ext/itsi_server/src/server/itsi_server.rs +0 -294
  254. data/gems/server/ext/itsi_server/src/server/lifecycle_event.rs +0 -9
  255. data/gems/server/ext/itsi_server/src/server/listener.rs +0 -318
  256. data/gems/server/ext/itsi_server/src/server/mod.rs +0 -11
  257. data/gems/server/ext/itsi_server/src/server/process_worker.rs +0 -196
  258. data/gems/server/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +0 -254
  259. data/gems/server/ext/itsi_server/src/server/serve_strategy/mod.rs +0 -27
  260. data/gems/server/ext/itsi_server/src/server/serve_strategy/single_mode.rs +0 -263
  261. data/gems/server/ext/itsi_server/src/server/signal.rs +0 -77
  262. data/gems/server/ext/itsi_server/src/server/thread_worker.rs +0 -367
  263. data/gems/server/ext/itsi_server/src/server/tls/locked_dir_cache.rs +0 -132
  264. data/gems/server/ext/itsi_server/src/server/tls.rs +0 -265
  265. data/gems/server/ext/itsi_tracing/Cargo.lock +0 -274
  266. data/gems/server/ext/itsi_tracing/Cargo.toml +0 -16
  267. data/gems/server/ext/itsi_tracing/src/lib.rs +0 -58
  268. data/gems/server/lib/itsi/stream_io.rb +0 -38
  269. data/sandbox/itsi_sandbox_rails/.kamal/hooks/docker-setup.sample +0 -3
  270. data/sandbox/itsi_sandbox_rails/.kamal/hooks/post-app-boot.sample +0 -3
  271. data/sandbox/itsi_sandbox_rails/.kamal/hooks/post-deploy.sample +0 -14
  272. data/sandbox/itsi_sandbox_rails/.kamal/hooks/post-proxy-reboot.sample +0 -3
  273. data/sandbox/itsi_sandbox_rails/.kamal/hooks/pre-app-boot.sample +0 -3
  274. data/sandbox/itsi_sandbox_rails/.kamal/hooks/pre-build.sample +0 -51
  275. data/sandbox/itsi_sandbox_rails/.kamal/hooks/pre-connect.sample +0 -47
  276. data/sandbox/itsi_sandbox_rails/.kamal/hooks/pre-deploy.sample +0 -109
  277. data/sandbox/itsi_sandbox_rails/.kamal/hooks/pre-proxy-reboot.sample +0 -3
  278. data/sandbox/itsi_sandbox_rails/.kamal/secrets +0 -17
  279. data/sandbox/itsi_sandbox_rails/bin/dev +0 -2
  280. data/sandbox/itsi_sandbox_rails/bin/jobs +0 -6
  281. data/sandbox/itsi_sandbox_rails/bin/kamal +0 -27
  282. data/sandbox/itsi_sandbox_rails/bin/thrust +0 -5
  283. data/sandbox/itsi_sandbox_rails/config/cache.yml +0 -16
  284. data/sandbox/itsi_sandbox_rails/config/deploy.yml +0 -116
  285. data/sandbox/itsi_sandbox_rails/config/queue.yml +0 -18
  286. data/sandbox/itsi_sandbox_rails/config/recurring.yml +0 -10
  287. data/sandbox/itsi_sandbox_rails/db/cable_schema.rb +0 -11
  288. data/sandbox/itsi_sandbox_rails/db/cache_schema.rb +0 -14
  289. data/sandbox/itsi_sandbox_rails/db/queue_schema.rb +0 -129
  290. data/sandbox/itsi_sandbox_rails/public/400.html +0 -114
  291. data/sandbox/itsi_sandbox_rails/test/fixtures/posts.yml +0 -9
  292. data/sandbox/itsi_sandbox_rails/test/models/post_test.rb +0 -7
  293. /data/{sandbox/itsi_sandbox_rails/script/.keep → crates/_index.md} +0 -0
  294. /data/gems/server/lib/itsi/{index.html → server/default_app/index.html} +0 -0
@@ -1,355 +0,0 @@
1
- # This file is automatically @generated by Cargo.
2
- # It is not intended for manual editing.
3
- version = 4
4
-
5
- [[package]]
6
- name = "aho-corasick"
7
- version = "1.1.3"
8
- source = "registry+https://github.com/rust-lang/crates.io-index"
9
- checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
10
- dependencies = [
11
- "memchr",
12
- ]
13
-
14
- [[package]]
15
- name = "bindgen"
16
- version = "0.69.5"
17
- source = "registry+https://github.com/rust-lang/crates.io-index"
18
- checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088"
19
- dependencies = [
20
- "bitflags",
21
- "cexpr",
22
- "clang-sys",
23
- "itertools",
24
- "lazy_static",
25
- "lazycell",
26
- "proc-macro2",
27
- "quote",
28
- "regex",
29
- "rustc-hash",
30
- "shlex",
31
- "syn",
32
- ]
33
-
34
- [[package]]
35
- name = "bitflags"
36
- version = "2.8.0"
37
- source = "registry+https://github.com/rust-lang/crates.io-index"
38
- checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36"
39
-
40
- [[package]]
41
- name = "bytes"
42
- version = "1.10.0"
43
- source = "registry+https://github.com/rust-lang/crates.io-index"
44
- checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9"
45
-
46
- [[package]]
47
- name = "cexpr"
48
- version = "0.6.0"
49
- source = "registry+https://github.com/rust-lang/crates.io-index"
50
- checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
51
- dependencies = [
52
- "nom",
53
- ]
54
-
55
- [[package]]
56
- name = "cfg-if"
57
- version = "1.0.0"
58
- source = "registry+https://github.com/rust-lang/crates.io-index"
59
- checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
60
-
61
- [[package]]
62
- name = "clang-sys"
63
- version = "1.8.1"
64
- source = "registry+https://github.com/rust-lang/crates.io-index"
65
- checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4"
66
- dependencies = [
67
- "glob",
68
- "libc",
69
- "libloading",
70
- ]
71
-
72
- [[package]]
73
- name = "either"
74
- version = "1.14.0"
75
- source = "registry+https://github.com/rust-lang/crates.io-index"
76
- checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d"
77
-
78
- [[package]]
79
- name = "glob"
80
- version = "0.3.2"
81
- source = "registry+https://github.com/rust-lang/crates.io-index"
82
- checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
83
-
84
- [[package]]
85
- name = "itertools"
86
- version = "0.12.1"
87
- source = "registry+https://github.com/rust-lang/crates.io-index"
88
- checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
89
- dependencies = [
90
- "either",
91
- ]
92
-
93
- [[package]]
94
- name = "itsi_rb_helpers"
95
- version = "0.1.0"
96
- dependencies = [
97
- "magnus",
98
- "rb-sys",
99
- ]
100
-
101
- [[package]]
102
- name = "lazy_static"
103
- version = "1.5.0"
104
- source = "registry+https://github.com/rust-lang/crates.io-index"
105
- checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
106
-
107
- [[package]]
108
- name = "lazycell"
109
- version = "1.3.0"
110
- source = "registry+https://github.com/rust-lang/crates.io-index"
111
- checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
112
-
113
- [[package]]
114
- name = "libc"
115
- version = "0.2.170"
116
- source = "registry+https://github.com/rust-lang/crates.io-index"
117
- checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828"
118
-
119
- [[package]]
120
- name = "libloading"
121
- version = "0.8.6"
122
- source = "registry+https://github.com/rust-lang/crates.io-index"
123
- checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
124
- dependencies = [
125
- "cfg-if",
126
- "windows-targets",
127
- ]
128
-
129
- [[package]]
130
- name = "magnus"
131
- version = "0.7.1"
132
- source = "registry+https://github.com/rust-lang/crates.io-index"
133
- checksum = "3d87ae53030f3a22e83879e666cb94e58a7bdf31706878a0ba48752994146dab"
134
- dependencies = [
135
- "bytes",
136
- "magnus-macros",
137
- "rb-sys",
138
- "rb-sys-env",
139
- "seq-macro",
140
- ]
141
-
142
- [[package]]
143
- name = "magnus-macros"
144
- version = "0.6.0"
145
- source = "registry+https://github.com/rust-lang/crates.io-index"
146
- checksum = "5968c820e2960565f647819f5928a42d6e874551cab9d88d75e3e0660d7f71e3"
147
- dependencies = [
148
- "proc-macro2",
149
- "quote",
150
- "syn",
151
- ]
152
-
153
- [[package]]
154
- name = "memchr"
155
- version = "2.7.4"
156
- source = "registry+https://github.com/rust-lang/crates.io-index"
157
- checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
158
-
159
- [[package]]
160
- name = "minimal-lexical"
161
- version = "0.2.1"
162
- source = "registry+https://github.com/rust-lang/crates.io-index"
163
- checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
164
-
165
- [[package]]
166
- name = "nom"
167
- version = "7.1.3"
168
- source = "registry+https://github.com/rust-lang/crates.io-index"
169
- checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
170
- dependencies = [
171
- "memchr",
172
- "minimal-lexical",
173
- ]
174
-
175
- [[package]]
176
- name = "proc-macro2"
177
- version = "1.0.93"
178
- source = "registry+https://github.com/rust-lang/crates.io-index"
179
- checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99"
180
- dependencies = [
181
- "unicode-ident",
182
- ]
183
-
184
- [[package]]
185
- name = "quote"
186
- version = "1.0.38"
187
- source = "registry+https://github.com/rust-lang/crates.io-index"
188
- checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc"
189
- dependencies = [
190
- "proc-macro2",
191
- ]
192
-
193
- [[package]]
194
- name = "rb-sys"
195
- version = "0.9.110"
196
- source = "registry+https://github.com/rust-lang/crates.io-index"
197
- checksum = "56cf964f8e44115e50009921ea3d3791b6f74d1ae6d6ed37114fbe03a1cd7308"
198
- dependencies = [
199
- "rb-sys-build",
200
- ]
201
-
202
- [[package]]
203
- name = "rb-sys-build"
204
- version = "0.9.110"
205
- source = "registry+https://github.com/rust-lang/crates.io-index"
206
- checksum = "161480347f56473107d4135643b6b1909331eec61445e113b256708a28b691c5"
207
- dependencies = [
208
- "bindgen",
209
- "lazy_static",
210
- "proc-macro2",
211
- "quote",
212
- "regex",
213
- "shell-words",
214
- "syn",
215
- ]
216
-
217
- [[package]]
218
- name = "rb-sys-env"
219
- version = "0.1.2"
220
- source = "registry+https://github.com/rust-lang/crates.io-index"
221
- checksum = "a35802679f07360454b418a5d1735c89716bde01d35b1560fc953c1415a0b3bb"
222
-
223
- [[package]]
224
- name = "regex"
225
- version = "1.11.1"
226
- source = "registry+https://github.com/rust-lang/crates.io-index"
227
- checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
228
- dependencies = [
229
- "aho-corasick",
230
- "memchr",
231
- "regex-automata",
232
- "regex-syntax",
233
- ]
234
-
235
- [[package]]
236
- name = "regex-automata"
237
- version = "0.4.9"
238
- source = "registry+https://github.com/rust-lang/crates.io-index"
239
- checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
240
- dependencies = [
241
- "aho-corasick",
242
- "memchr",
243
- "regex-syntax",
244
- ]
245
-
246
- [[package]]
247
- name = "regex-syntax"
248
- version = "0.8.5"
249
- source = "registry+https://github.com/rust-lang/crates.io-index"
250
- checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
251
-
252
- [[package]]
253
- name = "rustc-hash"
254
- version = "1.1.0"
255
- source = "registry+https://github.com/rust-lang/crates.io-index"
256
- checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
257
-
258
- [[package]]
259
- name = "seq-macro"
260
- version = "0.3.5"
261
- source = "registry+https://github.com/rust-lang/crates.io-index"
262
- checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4"
263
-
264
- [[package]]
265
- name = "shell-words"
266
- version = "1.1.0"
267
- source = "registry+https://github.com/rust-lang/crates.io-index"
268
- checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
269
-
270
- [[package]]
271
- name = "shlex"
272
- version = "1.3.0"
273
- source = "registry+https://github.com/rust-lang/crates.io-index"
274
- checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
275
-
276
- [[package]]
277
- name = "syn"
278
- version = "2.0.98"
279
- source = "registry+https://github.com/rust-lang/crates.io-index"
280
- checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1"
281
- dependencies = [
282
- "proc-macro2",
283
- "quote",
284
- "unicode-ident",
285
- ]
286
-
287
- [[package]]
288
- name = "unicode-ident"
289
- version = "1.0.17"
290
- source = "registry+https://github.com/rust-lang/crates.io-index"
291
- checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
292
-
293
- [[package]]
294
- name = "windows-targets"
295
- version = "0.52.6"
296
- source = "registry+https://github.com/rust-lang/crates.io-index"
297
- checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
298
- dependencies = [
299
- "windows_aarch64_gnullvm",
300
- "windows_aarch64_msvc",
301
- "windows_i686_gnu",
302
- "windows_i686_gnullvm",
303
- "windows_i686_msvc",
304
- "windows_x86_64_gnu",
305
- "windows_x86_64_gnullvm",
306
- "windows_x86_64_msvc",
307
- ]
308
-
309
- [[package]]
310
- name = "windows_aarch64_gnullvm"
311
- version = "0.52.6"
312
- source = "registry+https://github.com/rust-lang/crates.io-index"
313
- checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
314
-
315
- [[package]]
316
- name = "windows_aarch64_msvc"
317
- version = "0.52.6"
318
- source = "registry+https://github.com/rust-lang/crates.io-index"
319
- checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
320
-
321
- [[package]]
322
- name = "windows_i686_gnu"
323
- version = "0.52.6"
324
- source = "registry+https://github.com/rust-lang/crates.io-index"
325
- checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
326
-
327
- [[package]]
328
- name = "windows_i686_gnullvm"
329
- version = "0.52.6"
330
- source = "registry+https://github.com/rust-lang/crates.io-index"
331
- checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
332
-
333
- [[package]]
334
- name = "windows_i686_msvc"
335
- version = "0.52.6"
336
- source = "registry+https://github.com/rust-lang/crates.io-index"
337
- checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
338
-
339
- [[package]]
340
- name = "windows_x86_64_gnu"
341
- version = "0.52.6"
342
- source = "registry+https://github.com/rust-lang/crates.io-index"
343
- checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
344
-
345
- [[package]]
346
- name = "windows_x86_64_gnullvm"
347
- version = "0.52.6"
348
- source = "registry+https://github.com/rust-lang/crates.io-index"
349
- checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
350
-
351
- [[package]]
352
- name = "windows_x86_64_msvc"
353
- version = "0.52.6"
354
- source = "registry+https://github.com/rust-lang/crates.io-index"
355
- checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
@@ -1,10 +0,0 @@
1
- [package]
2
- name = "itsi_rb_helpers"
3
- version = "0.1.0"
4
- edition = "2024"
5
-
6
- [dependencies]
7
- cfg-if = "1.0.0"
8
- magnus = { version = "0.7.1", features = ["rb-sys", "bytes"] }
9
- nix = "0.29.0"
10
- rb-sys = "0.9.105"
@@ -1,121 +0,0 @@
1
- use magnus::IntoValue;
2
- use magnus::rb_sys::AsRawValue;
3
- use magnus::value::BoxValue;
4
- use magnus::{Ruby, Value, value::ReprValue};
5
- use std::fmt::{self, Debug, Formatter};
6
- use std::ops::Deref;
7
-
8
- /// HeapVal is a wrapper for heap-allocated magnus ReprVa;ies
9
- /// that is marked as thread-safe(Send and Sync)
10
- /// It's up to the user to actually ensure this though,
11
- /// typically by only interacting with the value from a thread which
12
- /// holds the GVL.
13
- pub struct HeapValue<T>(pub BoxValue<T>)
14
- where
15
- T: ReprValue;
16
-
17
- impl<T> PartialEq for HeapValue<T>
18
- where
19
- T: ReprValue,
20
- {
21
- fn eq(&self, other: &Self) -> bool {
22
- self.0.as_raw() == other.0.as_raw()
23
- }
24
- }
25
-
26
- impl<T> Deref for HeapValue<T>
27
- where
28
- T: ReprValue,
29
- {
30
- type Target = T;
31
-
32
- fn deref(&self) -> &Self::Target {
33
- &self.0
34
- }
35
- }
36
-
37
- impl<T> HeapValue<T>
38
- where
39
- T: ReprValue,
40
- {
41
- pub fn inner(self) -> T {
42
- *self.0
43
- }
44
- }
45
-
46
- impl<T> IntoValue for HeapValue<T>
47
- where
48
- T: ReprValue,
49
- {
50
- fn into_value_with(self, _: &Ruby) -> Value {
51
- self.0.into_value()
52
- }
53
- }
54
-
55
- impl<T> From<T> for HeapValue<T>
56
- where
57
- T: ReprValue,
58
- {
59
- fn from(value: T) -> Self {
60
- HeapValue(BoxValue::new(value))
61
- }
62
- }
63
-
64
- impl<T> Clone for HeapValue<T>
65
- where
66
- T: ReprValue + Clone,
67
- {
68
- fn clone(&self) -> Self {
69
- HeapValue(BoxValue::new(*self.0.deref()))
70
- }
71
- }
72
-
73
- impl<T> Debug for HeapValue<T>
74
- where
75
- T: ReprValue + Debug,
76
- {
77
- fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
78
- write!(f, "{:?}", self.0)
79
- }
80
- }
81
-
82
- unsafe impl<T> Send for HeapValue<T> where T: ReprValue {}
83
- unsafe impl<T> Sync for HeapValue<T> where T: ReprValue {}
84
-
85
- /// HeapVal is a wrapper for heap-allocated magnus Values
86
- /// that is marked as thread-safe(Send and Sync)
87
- /// It's up to the user to actually ensure this though,
88
- /// typically by only interacting with the value from a thread which
89
- /// holds the GVL.
90
- pub struct HeapVal(HeapValue<Value>);
91
- impl Deref for HeapVal {
92
- type Target = Value;
93
-
94
- fn deref(&self) -> &Self::Target {
95
- &self.0
96
- }
97
- }
98
-
99
- impl IntoValue for HeapVal {
100
- fn into_value_with(self, _: &Ruby) -> Value {
101
- self.0.into_value()
102
- }
103
- }
104
-
105
- impl From<Value> for HeapVal {
106
- fn from(value: Value) -> Self {
107
- HeapVal(HeapValue(BoxValue::new(value)))
108
- }
109
- }
110
-
111
- impl Clone for HeapVal {
112
- fn clone(&self) -> Self {
113
- HeapVal(HeapValue(BoxValue::new(*self.0.deref())))
114
- }
115
- }
116
-
117
- impl Debug for HeapVal {
118
- fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
119
- write!(f, "{:?}", self.0)
120
- }
121
- }
@@ -1,178 +0,0 @@
1
- use std::{os::raw::c_void, ptr::null_mut, sync::Arc};
2
-
3
- use magnus::{
4
- RArray, Ruby, Thread, Value,
5
- rb_sys::FromRawValue,
6
- value::{LazyId, ReprValue},
7
- };
8
- use rb_sys::{
9
- rb_thread_call_with_gvl, rb_thread_call_without_gvl, rb_thread_create, rb_thread_schedule,
10
- rb_thread_wakeup,
11
- };
12
-
13
- mod heap_value;
14
- pub use heap_value::{HeapVal, HeapValue};
15
- static ID_FORK: LazyId = LazyId::new("fork");
16
- static ID_LIST: LazyId = LazyId::new("list");
17
- static ID_EQ: LazyId = LazyId::new("==");
18
- static ID_ALIVE: LazyId = LazyId::new("alive?");
19
- static ID_THREAD_VARIABLE_GET: LazyId = LazyId::new("thread_variable_get");
20
-
21
- pub fn schedule_thread() {
22
- unsafe {
23
- rb_thread_schedule();
24
- };
25
- }
26
- pub fn create_ruby_thread<F>(f: F) -> Thread
27
- where
28
- F: FnOnce() + Send + 'static,
29
- {
30
- extern "C" fn trampoline<F>(ptr: *mut c_void) -> u64
31
- where
32
- F: FnOnce(),
33
- {
34
- // Reconstruct the boxed Option<F> that holds our closure.
35
- let boxed_closure: Box<Option<F>> = unsafe { Box::from_raw(ptr as *mut Option<F>) };
36
- // Extract the closure. (The Option should be Some; panic otherwise.)
37
- let closure = (*boxed_closure).expect("Closure already taken");
38
- // Call the closure and return its result.
39
- closure();
40
- 0
41
- }
42
-
43
- // Box the closure (wrapped in an Option) to create a stable pointer.
44
- let boxed_closure = Box::new(Some(f));
45
- let ptr = Box::into_raw(boxed_closure) as *mut c_void;
46
-
47
- // Call rb_thread_create with our trampoline and boxed closure.
48
- unsafe {
49
- let thread = rb_thread_create(Some(trampoline::<F>), ptr);
50
- rb_thread_wakeup(thread);
51
- rb_thread_schedule();
52
- Thread::from_value(Value::from_raw(thread)).unwrap()
53
- }
54
- }
55
-
56
- pub fn call_without_gvl<F, R>(f: F) -> R
57
- where
58
- F: FnOnce() -> R,
59
- {
60
- // This is the function that Ruby calls “in the background” with the GVL released.
61
- extern "C" fn trampoline<F, R>(arg: *mut c_void) -> *mut c_void
62
- where
63
- F: FnOnce() -> R,
64
- {
65
- // 1) Reconstruct the Box that holds our closure
66
- let closure_ptr = arg as *mut Option<F>;
67
- let closure = unsafe { (*closure_ptr).take().expect("Closure already taken") };
68
-
69
- // 2) Call the user’s closure
70
- let result = closure();
71
-
72
- // 3) Box up the result so we can return a pointer to it
73
- let boxed_result = Box::new(result);
74
- Box::into_raw(boxed_result) as *mut c_void
75
- }
76
-
77
- // Box up the closure so we have a stable pointer
78
- let mut closure_opt = Some(f);
79
- let closure_ptr = &mut closure_opt as *mut Option<F> as *mut c_void;
80
-
81
- // 4) Actually call `rb_thread_call_without_gvl`
82
- let raw_result_ptr = unsafe {
83
- rb_thread_call_without_gvl(Some(trampoline::<F, R>), closure_ptr, None, null_mut())
84
- };
85
-
86
- // 5) Convert the returned pointer back into R
87
- let result_box = unsafe { Box::from_raw(raw_result_ptr as *mut R) };
88
- *result_box
89
- }
90
-
91
- pub fn call_with_gvl<F, R>(f: F) -> R
92
- where
93
- F: FnOnce(Ruby) -> R,
94
- {
95
- extern "C" fn trampoline<F, R>(arg: *mut c_void) -> *mut c_void
96
- where
97
- F: FnOnce(Ruby) -> R,
98
- {
99
- // 1) Reconstruct the Box that holds our closure
100
- let closure_ptr = arg as *mut Option<F>;
101
- let closure = unsafe { (*closure_ptr).take().expect("Closure already taken") };
102
-
103
- // 2) Call the user’s closure
104
- let result = closure(Ruby::get().unwrap());
105
-
106
- // 3) Box up the result so we can return a pointer to it
107
- let boxed_result = Box::new(result);
108
- Box::into_raw(boxed_result) as *mut c_void
109
- }
110
-
111
- // Box up the closure so we have a stable pointer
112
- let mut closure_opt = Some(f);
113
- let closure_ptr = &mut closure_opt as *mut Option<F> as *mut c_void;
114
-
115
- // 4) Actually call `rb_thread_call_without_gvl`
116
- let raw_result_ptr = unsafe { rb_thread_call_with_gvl(Some(trampoline::<F, R>), closure_ptr) };
117
-
118
- // 5) Convert the returned pointer back into R
119
- let result_box = unsafe { Box::from_raw(raw_result_ptr as *mut R) };
120
- *result_box
121
- }
122
-
123
- pub fn fork(after_fork: Arc<Option<impl Fn()>>) -> Option<i32> {
124
- let ruby = Ruby::get().unwrap();
125
- let fork_result = ruby
126
- .module_kernel()
127
- .funcall::<_, _, Option<i32>>(*ID_FORK, ())
128
- .unwrap();
129
- if fork_result.is_none() {
130
- if let Some(f) = &*after_fork {
131
- f()
132
- }
133
- }
134
- fork_result
135
- }
136
-
137
- pub fn kill_threads<T>(threads: Vec<T>)
138
- where
139
- T: ReprValue,
140
- {
141
- for thr in &threads {
142
- let alive: bool = thr
143
- .funcall(*ID_ALIVE, ())
144
- .expect("Failed to check if thread is alive");
145
- if !alive {
146
- eprintln!("Thread killed");
147
- break;
148
- }
149
- eprintln!("Killing thread {:?}", thr.as_value());
150
- thr.funcall::<_, _, Value>("terminate", ())
151
- .expect("Failed to kill thread");
152
- }
153
- }
154
-
155
- pub fn terminate_non_fork_safe_threads() {
156
- let ruby = Ruby::get().unwrap();
157
- let thread_class = ruby.class_thread();
158
- let current: Thread = ruby.thread_current();
159
- let threads: RArray = thread_class
160
- .funcall(*ID_LIST, ())
161
- .expect("Failed to list Ruby threads");
162
-
163
- let non_fork_safe_threads = threads
164
- .into_iter()
165
- .filter_map(|v| {
166
- let v_thread = Thread::from_value(v).unwrap();
167
- let non_fork_safe = !v_thread
168
- .funcall::<_, _, bool>(*ID_EQ, (current,))
169
- .unwrap_or(false)
170
- && !v_thread
171
- .funcall::<_, _, bool>(*ID_THREAD_VARIABLE_GET, (ruby.sym_new("fork_safe"),))
172
- .unwrap_or(false);
173
- if non_fork_safe { Some(v_thread) } else { None }
174
- })
175
- .collect::<Vec<_>>();
176
-
177
- kill_threads(non_fork_safe_threads);
178
- }
@@ -1,24 +0,0 @@
1
- [package]
2
- name = "itsi-scheduler"
3
- version = "0.1.0"
4
- edition = "2021"
5
- authors = ["Wouter Coppieters <wc@pico.net.nz>"]
6
- license = "MIT"
7
- publish = false
8
-
9
- [lib]
10
- crate-type = ["cdylib"]
11
-
12
- [dependencies]
13
- magnus = { version = "0.7.1", features = ["rb-sys", "bytes"] }
14
- derive_more = { version = "2.0.1", features = ["debug"] }
15
- itsi_tracing = { path = "../itsi_tracing" }
16
- itsi_rb_helpers = { path = "../itsi_rb_helpers" }
17
- itsi_error = { path = "../itsi_error" }
18
- itsi_instrument_entry = { path = "../itsi_instrument_entry" }
19
- parking_lot = "0.12.3"
20
- mio = { version = "1.0.3", features = ["os-poll", "os-ext"] }
21
- rb-sys = "0.9.105"
22
- bytes = "1.10.1"
23
- nix = "0.29.0"
24
- tracing = "0.1.41"
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "mkmf"
4
- require "rb_sys/mkmf"
5
-
6
- create_rust_makefile("itsi/scheduler/itsi_scheduler")