itsi-server 0.2.21 → 0.2.23

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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +25 -38
  3. data/Cargo.toml +4 -0
  4. data/Rakefile +39 -7
  5. data/ext/itsi_scheduler/Cargo.toml +1 -1
  6. data/ext/itsi_server/Cargo.lock +2 -2
  7. data/ext/itsi_server/Cargo.toml +1 -1
  8. data/ext/itsi_server/src/server/middleware_stack/mod.rs +3 -9
  9. data/ext/itsi_server/src/server/signal.rs +7 -5
  10. data/ext/itsi_server/src/services/itsi_http_service.rs +5 -8
  11. data/lib/itsi/server/native_extension.rb +34 -0
  12. data/lib/itsi/server/version.rb +1 -1
  13. data/lib/itsi/server.rb +10 -2
  14. data/vendor/rb-sys-build/.cargo-ok +1 -0
  15. data/vendor/rb-sys-build/.cargo_vcs_info.json +6 -0
  16. data/vendor/rb-sys-build/Cargo.lock +294 -0
  17. data/vendor/rb-sys-build/Cargo.toml +71 -0
  18. data/vendor/rb-sys-build/Cargo.toml.orig +32 -0
  19. data/vendor/rb-sys-build/LICENSE-APACHE +190 -0
  20. data/vendor/rb-sys-build/LICENSE-MIT +21 -0
  21. data/vendor/rb-sys-build/src/bindings/sanitizer.rs +185 -0
  22. data/vendor/rb-sys-build/src/bindings/stable_api.rs +247 -0
  23. data/vendor/rb-sys-build/src/bindings/wrapper.h +71 -0
  24. data/vendor/rb-sys-build/src/bindings.rs +280 -0
  25. data/vendor/rb-sys-build/src/cc.rs +421 -0
  26. data/vendor/rb-sys-build/src/lib.rs +12 -0
  27. data/vendor/rb-sys-build/src/rb_config/flags.rs +101 -0
  28. data/vendor/rb-sys-build/src/rb_config/library.rs +132 -0
  29. data/vendor/rb-sys-build/src/rb_config/search_path.rs +57 -0
  30. data/vendor/rb-sys-build/src/rb_config.rs +906 -0
  31. data/vendor/rb-sys-build/src/utils.rs +53 -0
  32. metadata +25 -11
  33. data/ext/itsi_server/target/release/build/clang-sys-0dae18670e690c25/out/common.rs +0 -355
  34. data/ext/itsi_server/target/release/build/clang-sys-0dae18670e690c25/out/dynamic.rs +0 -276
  35. data/ext/itsi_server/target/release/build/clang-sys-0dae18670e690c25/out/macros.rs +0 -49
  36. data/ext/itsi_server/target/release/build/oid-registry-71b994a322b296ec/out/oid_db.rs +0 -537
  37. data/ext/itsi_server/target/release/build/rb-sys-9f9831ab50fb86db/out/bindings-0.9.124-mri-arm64-darwin24-2.7.8.rs +0 -6234
  38. data/ext/itsi_server/target/release/build/rb-sys-9f9831ab50fb86db/out/bindings-0.9.124-mri-arm64-darwin24-3.4.5.rs +0 -8936
  39. data/ext/itsi_server/target/release/build/rb-sys-9f9831ab50fb86db/out/bindings-0.9.124-mri-arm64-darwin24-4.0.1.rs +0 -9060
  40. data/ext/itsi_server/target/release/build/typenum-11265e44e46de3b7/out/tests.rs +0 -20563
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1bd2a908171b06331905949fa422899f9f1c104bc351cf18f64fa194e75d3a53
4
- data.tar.gz: 75a9044dc44089edc2555ee72af7a61c51c50910c8845ae05e876bddc369d42b
3
+ metadata.gz: fb8f000cf846b5324309070910aac12db86cfe8dc10a792aab03def624e25fe7
4
+ data.tar.gz: 76d9b53f76fd77622aec8059f815a77bdd9684262fc9ff3851292bf5c75f9e57
5
5
  SHA512:
6
- metadata.gz: 35d0c81a040e5e182e210ebf0365775c0f8c8e277fa01942b491e43c4a6fee5efe28b48202c3925a6c3158bffe754403d4960ce66f00a7be415df73bc50549f7
7
- data.tar.gz: fe30420266024df4a094d49b6cead529faa20a84b940fc6c99c095c5f3d7fd54fc77f103906d56919b7fa2588f65484e3c45c030bbb6467501565ba0a85525ad
6
+ metadata.gz: 378978e97506653bc14235b7859390c9f4acde16f9fc2b99025834474568deb12004a140dfaa6b6fdf9a86daa9d7a4ba53c00405ccf962035cd20c49e8eae6d1
7
+ data.tar.gz: b0512cec9b48b744a199d51e39accbad5fcd7904d7e2b47195502fbbe89a665ef7b05be072a2ae639807f0450a3b7a64c4790e78270cae47020d28425f66161a
data/Cargo.lock CHANGED
@@ -270,7 +270,7 @@ version = "0.28.2"
270
270
  source = "registry+https://github.com/rust-lang/crates.io-index"
271
271
  checksum = "bfa9b6986f250236c27e5a204062434a773a13243d2ffc2955f37bdba4c5c6a1"
272
272
  dependencies = [
273
- "bindgen",
273
+ "bindgen 0.69.5",
274
274
  "cc",
275
275
  "cmake",
276
276
  "dunce",
@@ -427,6 +427,24 @@ dependencies = [
427
427
  "which",
428
428
  ]
429
429
 
430
+ [[package]]
431
+ name = "bindgen"
432
+ version = "0.72.1"
433
+ source = "registry+https://github.com/rust-lang/crates.io-index"
434
+ checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895"
435
+ dependencies = [
436
+ "bitflags 2.9.0",
437
+ "cexpr",
438
+ "clang-sys",
439
+ "itertools",
440
+ "proc-macro2",
441
+ "quote",
442
+ "regex",
443
+ "rustc-hash 2.1.1",
444
+ "shlex",
445
+ "syn 2.0.101",
446
+ ]
447
+
430
448
  [[package]]
431
449
  name = "bitflags"
432
450
  version = "1.3.2"
@@ -660,7 +678,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
660
678
  checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
661
679
  dependencies = [
662
680
  "lazy_static",
663
- "windows-sys 0.59.0",
681
+ "windows-sys 0.48.0",
664
682
  ]
665
683
 
666
684
  [[package]]
@@ -1642,27 +1660,9 @@ version = "1.0.15"
1642
1660
  source = "registry+https://github.com/rust-lang/crates.io-index"
1643
1661
  checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
1644
1662
 
1645
- [[package]]
1646
- name = "itsi-scheduler"
1647
- version = "0.2.21"
1648
- dependencies = [
1649
- "bytes",
1650
- "derive_more",
1651
- "itsi_error",
1652
- "itsi_instrument_entry",
1653
- "itsi_rb_helpers",
1654
- "itsi_tracing",
1655
- "magnus",
1656
- "mio",
1657
- "nix",
1658
- "parking_lot",
1659
- "rb-sys",
1660
- "tracing",
1661
- ]
1662
-
1663
1663
  [[package]]
1664
1664
  name = "itsi-server"
1665
- version = "0.2.21"
1665
+ version = "0.2.23"
1666
1666
  dependencies = [
1667
1667
  "argon2",
1668
1668
  "async-channel",
@@ -1772,15 +1772,6 @@ dependencies = [
1772
1772
  "thiserror 2.0.12",
1773
1773
  ]
1774
1774
 
1775
- [[package]]
1776
- name = "itsi_instrument_entry"
1777
- version = "0.1.0"
1778
- dependencies = [
1779
- "proc-macro2",
1780
- "quote",
1781
- "syn 1.0.109",
1782
- ]
1783
-
1784
1775
  [[package]]
1785
1776
  name = "itsi_rb_helpers"
1786
1777
  version = "0.1.0"
@@ -1934,8 +1925,7 @@ checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
1934
1925
  [[package]]
1935
1926
  name = "magnus"
1936
1927
  version = "0.8.2"
1937
- source = "registry+https://github.com/rust-lang/crates.io-index"
1938
- checksum = "3b36a5b126bbe97eb0d02d07acfeb327036c6319fd816139a49824a83b7f9012"
1928
+ source = "git+https://github.com/matsadler/magnus.git?rev=1ed232edb2b75a2eed9b1def34ad57e55c411a5c#1ed232edb2b75a2eed9b1def34ad57e55c411a5c"
1939
1929
  dependencies = [
1940
1930
  "bytes",
1941
1931
  "magnus-macros",
@@ -1947,8 +1937,7 @@ dependencies = [
1947
1937
  [[package]]
1948
1938
  name = "magnus-macros"
1949
1939
  version = "0.8.0"
1950
- source = "registry+https://github.com/rust-lang/crates.io-index"
1951
- checksum = "47607461fd8e1513cb4f2076c197d8092d921a1ea75bd08af97398f593751892"
1940
+ source = "git+https://github.com/matsadler/magnus.git?rev=1ed232edb2b75a2eed9b1def34ad57e55c411a5c#1ed232edb2b75a2eed9b1def34ad57e55c411a5c"
1952
1941
  dependencies = [
1953
1942
  "proc-macro2",
1954
1943
  "quote",
@@ -2591,10 +2580,8 @@ dependencies = [
2591
2580
  [[package]]
2592
2581
  name = "rb-sys-build"
2593
2582
  version = "0.9.124"
2594
- source = "registry+https://github.com/rust-lang/crates.io-index"
2595
- checksum = "568068db4102230882e6d4ae8de6632e224ca75fe5970f6e026a04e91ed635d3"
2596
2583
  dependencies = [
2597
- "bindgen",
2584
+ "bindgen 0.72.1",
2598
2585
  "lazy_static",
2599
2586
  "proc-macro2",
2600
2587
  "quote",
@@ -3922,7 +3909,7 @@ version = "0.1.9"
3922
3909
  source = "registry+https://github.com/rust-lang/crates.io-index"
3923
3910
  checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
3924
3911
  dependencies = [
3925
- "windows-sys 0.59.0",
3912
+ "windows-sys 0.48.0",
3926
3913
  ]
3927
3914
 
3928
3915
  [[package]]
data/Cargo.toml CHANGED
@@ -5,3 +5,7 @@
5
5
  [workspace]
6
6
  members = ["./ext/itsi_server"]
7
7
  resolver = "2"
8
+
9
+ [patch.crates-io]
10
+ magnus = { git = "https://github.com/matsadler/magnus.git", rev = "1ed232edb2b75a2eed9b1def34ad57e55c411a5c" }
11
+ rb-sys-build = { path = "vendor/rb-sys-build" }
data/Rakefile CHANGED
@@ -3,15 +3,47 @@
3
3
  require "bundler/gem_tasks"
4
4
  require "minitest/test_task"
5
5
 
6
-
7
- Minitest::TestTask.create(:test) do |t|
8
- t.libs << 'test'
9
- t.libs << 'lib'
10
- t.warning = false
11
- t.test_globs = ['test/**/*.rb']
12
- t.test_prelude = 'require "helpers/test_helper.rb"'
6
+ SMOKE_TEST_GLOBS = %w[
7
+ test/options/bind.rb
8
+ test/options/header_read_timeout.rb
9
+ test/options/test_request_timeout.rb
10
+ test/options/test_threads.rb
11
+ test/rack/test_rack_server.rb
12
+ test/middleware/allow_list.rb
13
+ test/middleware/auth_api_key.rb
14
+ test/middleware/auth_basic.rb
15
+ test/middleware/cache_control.rb
16
+ test/middleware/cidr_to_regex.rb
17
+ test/middleware/compression.rb
18
+ test/middleware/cors.rb
19
+ test/middleware/csp.rb
20
+ test/middleware/deny_list.rb
21
+ test/middleware/etag.rb
22
+ test/middleware/header_interpolation.rb
23
+ test/middleware/location.rb
24
+ test/middleware/max_body.rb
25
+ test/middleware/request_headers.rb
26
+ test/middleware/response_headers.rb
27
+ test/middleware/static_assets.rb
28
+ test/middleware/static_response.rb
29
+ test/middleware/string_rewrite.rb
30
+ ].freeze
31
+
32
+ def configure_test_task(task_name, test_globs)
33
+ Minitest::TestTask.create(task_name) do |t|
34
+ t.libs << "test"
35
+ t.libs << "lib"
36
+ t.warning = false
37
+ t.test_globs = test_globs
38
+ t.test_prelude = 'require "helpers/test_helper.rb"'
39
+ end
13
40
  end
14
41
 
42
+ configure_test_task(:test, ["test/**/*.rb"])
43
+ configure_test_task("test:smoke", SMOKE_TEST_GLOBS)
44
+
45
+ task "test:full" => :test
46
+
15
47
  require "rb_sys/extensiontask"
16
48
 
17
49
  task build: :compile
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "itsi-scheduler"
3
- version = "0.2.21"
3
+ version = "0.2.23"
4
4
  edition = "2021"
5
5
  authors = ["Wouter Coppieters <wc@pico.net.nz>"]
6
6
  license = "MIT"
@@ -984,7 +984,7 @@ checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
984
984
 
985
985
  [[package]]
986
986
  name = "itsi-scheduler"
987
- version = "0.1.0"
987
+ version = "0.2.23"
988
988
  dependencies = [
989
989
  "bytes",
990
990
  "derive_more",
@@ -1002,7 +1002,7 @@ dependencies = [
1002
1002
 
1003
1003
  [[package]]
1004
1004
  name = "itsi-server"
1005
- version = "0.1.0"
1005
+ version = "0.2.23"
1006
1006
  dependencies = [
1007
1007
  "async-channel",
1008
1008
  "async-trait",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "itsi-server"
3
- version = "0.2.21"
3
+ version = "0.2.23"
4
4
  edition = "2021"
5
5
  authors = ["Wouter Coppieters <wc@pico.net.nz>"]
6
6
  license = "MIT"
@@ -263,7 +263,7 @@ impl MiddlewareSet {
263
263
  pub fn stack_for(
264
264
  &self,
265
265
  request: &HttpRequest,
266
- ) -> Result<(&Vec<Middleware>, Option<Arc<Regex>>)> {
266
+ ) -> Option<(&Vec<Middleware>, Option<Arc<Regex>>)> {
267
267
  let binding = self.route_set.matches(request.uri().path());
268
268
  let matches = binding.iter();
269
269
 
@@ -276,7 +276,7 @@ impl MiddlewareSet {
276
276
  let matching_pattern = self.patterns.get(index).cloned();
277
277
  if let Some(stack) = self.stacks.get(&index) {
278
278
  if stack.matches(request) {
279
- return Ok((&stack.layers, matching_pattern));
279
+ return Some((&stack.layers, matching_pattern));
280
280
  }
281
281
  }
282
282
  }
@@ -285,13 +285,7 @@ impl MiddlewareSet {
285
285
  request.uri().path(),
286
286
  self.route_set
287
287
  );
288
- Err(magnus::Error::new(
289
- magnus::Ruby::get().unwrap().exception_standard_error(),
290
- format!(
291
- "No matching middleware stack found for request: {:?}",
292
- request
293
- ),
294
- ))
288
+ None
295
289
  }
296
290
 
297
291
  pub fn parse_middleware(middleware_type: String, parameters: Value) -> Result<Middleware> {
@@ -45,15 +45,17 @@ pub fn unsubscribe_runtime() {
45
45
  pub fn send_lifecycle_event(event: LifecycleEvent) {
46
46
  if let Some(sender) = SIGNAL_HANDLER_CHANNEL.lock().as_ref() {
47
47
  if let Err(e) = sender.send(event) {
48
- // Channel full or receivers dropped - this is a critical error for shutdown signals
49
- eprintln!("Critical: Failed to send lifecycle event {:?}", e);
50
- // For shutdown events, try to force exit if channel delivery fails
51
48
  if matches!(
52
49
  e.0,
53
50
  LifecycleEvent::Shutdown | LifecycleEvent::ForceShutdown
54
51
  ) {
55
- eprintln!("Emergency shutdown due to signal delivery failure");
56
- std::process::exit(1);
52
+ SHUTDOWN_REQUESTED.store(true, Ordering::SeqCst);
53
+ warn!(
54
+ "Dropping shutdown lifecycle event after receiver closed: {:?}",
55
+ e
56
+ );
57
+ } else {
58
+ eprintln!("Warning: Failed to send lifecycle event {:?}", e);
57
59
  }
58
60
  }
59
61
  } else {
@@ -188,14 +188,11 @@ impl ItsiHttpService {
188
188
  let token_preference = self.server_params.itsi_server_token_preference;
189
189
 
190
190
  let service_future = async move {
191
- let middleware_stack = self
192
- .server_params
193
- .middleware
194
- .get()
195
- .unwrap()
196
- .stack_for(&req)
197
- .unwrap();
198
- let (stack, matching_pattern) = middleware_stack;
191
+ let Some((stack, matching_pattern)) =
192
+ self.server_params.middleware.get().unwrap().stack_for(&req)
193
+ else {
194
+ return Ok(NOT_FOUND_RESPONSE.to_http_response(accept).await);
195
+ };
199
196
  let mut resp: Option<HttpResponse> = None;
200
197
 
201
198
  let mut context =
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rbconfig"
4
+
5
+ module Itsi
6
+ class Server
7
+ module NativeExtension
8
+ module_function
9
+
10
+ def require!
11
+ ruby_abi = RUBY_VERSION[/\A\d+\.\d+/]
12
+
13
+ if ruby_abi && versioned_binary_present?(ruby_abi)
14
+ begin
15
+ require_relative "#{ruby_abi}/itsi_server"
16
+ return
17
+ rescue LoadError
18
+ # Fall back to the source-built extension when a packaged binary
19
+ # exists but cannot be loaded on this machine.
20
+ end
21
+ end
22
+
23
+ require_relative "itsi_server"
24
+ end
25
+
26
+ def versioned_binary_present?(ruby_abi)
27
+ binary_path = File.join(__dir__, ruby_abi, "itsi_server.#{RbConfig::CONFIG.fetch("DLEXT")}")
28
+ File.exist?(binary_path)
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ Itsi::Server::NativeExtension.require!
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Itsi
4
4
  class Server
5
- VERSION = "0.2.21"
5
+ VERSION = "0.2.23"
6
6
  end
7
7
  end
data/lib/itsi/server.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "server/version"
4
- require_relative "server/itsi_server"
4
+ require_relative "server/native_extension"
5
5
  require_relative "server/rack_interface"
6
6
  require_relative "server/grpc/grpc_interface"
7
7
  require_relative "server/grpc/grpc_call"
@@ -87,7 +87,15 @@ module Itsi
87
87
 
88
88
  def stop_background_threads
89
89
  @running && @running.each(&:stop)
90
- @background_threads&.each(&:join)
90
+ @background_threads&.each do |thread|
91
+ next unless thread
92
+
93
+ thread.join(5)
94
+ next unless thread.alive?
95
+
96
+ thread.kill
97
+ thread.join(1)
98
+ end
91
99
  @background_threads = []
92
100
  @running = []
93
101
  end
@@ -0,0 +1 @@
1
+ {"v":1}
@@ -0,0 +1,6 @@
1
+ {
2
+ "git": {
3
+ "sha1": "8b8369748af0e3fa80d20e11b38b423cb2009bdf"
4
+ },
5
+ "path_in_vcs": "crates/rb-sys-build"
6
+ }