itsi-server 0.2.7 → 0.2.9
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/Cargo.lock +1 -1
- data/ext/itsi_scheduler/Cargo.toml +1 -1
- data/ext/itsi_scheduler/src/itsi_scheduler.rs +16 -10
- data/ext/itsi_server/Cargo.toml +1 -1
- data/ext/itsi_server/src/services/itsi_http_service.rs +7 -10
- data/lib/itsi/server/config/config_helpers.rb +9 -0
- data/lib/itsi/server/config.rb +2 -0
- data/lib/itsi/server/version.rb +1 -1
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7de2dcacb42a3cad9986346e2acf704398e8fa5ea914c2c3172567426905b1fb
|
4
|
+
data.tar.gz: b3b899916642adc30083e4743dbf063431f6de66814e32fd078559f84f437c23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f2c16a266cdeee4d70b735c9a0f63448a453a06e56aadc18ddcf5f64218c219df882e5d39961d3e77b1edd757d63117da2e5b8a60dc854b50e13e9f14f52e21
|
7
|
+
data.tar.gz: e1d71d18956970cf5c7a8ccad1e766d7266428040acef89f3d032773ebcdcfa79fa872cf741ca26de26b0e87203565390720b2c74ac89e0e783a8267199ccca3
|
data/Cargo.lock
CHANGED
@@ -7,7 +7,7 @@ use itsi_error::ItsiError;
|
|
7
7
|
use itsi_rb_helpers::{call_without_gvl, create_ruby_thread};
|
8
8
|
use magnus::{
|
9
9
|
error::Result as MagnusResult,
|
10
|
-
value::{InnerValue, Opaque, ReprValue},
|
10
|
+
value::{InnerValue, Lazy, LazyId, Opaque, ReprValue},
|
11
11
|
Module, RClass, Ruby, Value,
|
12
12
|
};
|
13
13
|
use mio::{Events, Poll, Token, Waker};
|
@@ -19,7 +19,7 @@ use std::{
|
|
19
19
|
time::Duration,
|
20
20
|
};
|
21
21
|
use timer::Timer;
|
22
|
-
use tracing::{debug, info, warn};
|
22
|
+
use tracing::{debug, error, info, warn};
|
23
23
|
|
24
24
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
25
25
|
pub(crate) struct Readiness(i16);
|
@@ -31,6 +31,9 @@ impl std::fmt::Debug for ItsiScheduler {
|
|
31
31
|
}
|
32
32
|
|
33
33
|
const WAKE_TOKEN: Token = Token(0);
|
34
|
+
static ID_CURRENT: LazyId = LazyId::new("current");
|
35
|
+
static CLASS_FIBER: Lazy<RClass> =
|
36
|
+
Lazy::new(|ruby| ruby.module_kernel().const_get("Fiber").unwrap());
|
34
37
|
|
35
38
|
#[magnus::wrap(class = "Itsi::Scheduler", free_immediately, size)]
|
36
39
|
pub(crate) struct ItsiScheduler {
|
@@ -225,14 +228,17 @@ impl ItsiScheduler {
|
|
225
228
|
let result: Arc<RwLock<Option<T>>> = Arc::new(RwLock::new(None));
|
226
229
|
let result_clone = Arc::clone(&result);
|
227
230
|
|
228
|
-
let
|
229
|
-
let
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
231
|
+
let class_fiber = ruby.get_inner(&CLASS_FIBER);
|
232
|
+
let current_fiber = ruby
|
233
|
+
.get_inner(&CLASS_FIBER)
|
234
|
+
.funcall::<_, _, Value>(*ID_CURRENT, ());
|
235
|
+
|
236
|
+
if current_fiber.is_err() {
|
237
|
+
error!("Failed to get current fiber");
|
238
|
+
return Err(ItsiError::ArgumentError("Failed to get current fiber".to_string()).into());
|
239
|
+
}
|
240
|
+
let current_fiber = Opaque::from(current_fiber.unwrap());
|
241
|
+
let scheduler = Opaque::from(class_fiber.funcall::<_, _, Value>("scheduler", ()).unwrap());
|
236
242
|
|
237
243
|
create_ruby_thread(move || {
|
238
244
|
call_without_gvl(|| {
|
data/ext/itsi_server/Cargo.toml
CHANGED
@@ -108,16 +108,13 @@ impl HttpRequestContext {
|
|
108
108
|
}
|
109
109
|
|
110
110
|
pub fn set_supported_encoding_set(&self, req: &HttpRequest) {
|
111
|
-
|
112
|
-
.headers()
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
.supported_encoding_set
|
119
|
-
.set(supported_encoding_set)
|
120
|
-
.unwrap();
|
111
|
+
self.inner.supported_encoding_set.get_or_init(move || {
|
112
|
+
req.headers()
|
113
|
+
.get_all(ACCEPT_ENCODING)
|
114
|
+
.into_iter()
|
115
|
+
.cloned()
|
116
|
+
.collect::<Vec<_>>()
|
117
|
+
});
|
121
118
|
}
|
122
119
|
|
123
120
|
pub fn set_origin(&self, origin: Option<String>) {
|
@@ -42,7 +42,16 @@ module Itsi
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def self.included(cls) # rubocop:disable Metrics/PerceivedComplexity,Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength
|
45
|
+
|
46
|
+
class << cls
|
47
|
+
def subclasses
|
48
|
+
@subclasses ||= []
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
45
52
|
def cls.inherited(base) # rubocop:disable Metrics/MethodLength,Lint/MissingSuper,Metrics/PerceivedComplexity
|
53
|
+
self.subclasses << base
|
54
|
+
|
46
55
|
%i[detail documentation insert_text schema].each do |attr|
|
47
56
|
base.define_singleton_method(attr) do |value = nil|
|
48
57
|
@middleware_class_attrs ||= {}
|
data/lib/itsi/server/config.rb
CHANGED
@@ -35,6 +35,7 @@ module Itsi
|
|
35
35
|
# 3. Default values.
|
36
36
|
def self.build_config(args, config_file_path, builder_proc = nil)
|
37
37
|
args.transform_keys!(&:to_sym)
|
38
|
+
|
38
39
|
itsifile_config, errors = \
|
39
40
|
if builder_proc
|
40
41
|
DSL.evaluate(&builder_proc)
|
@@ -105,6 +106,7 @@ module Itsi
|
|
105
106
|
Server.write_pid
|
106
107
|
end
|
107
108
|
|
109
|
+
|
108
110
|
srv_config = {
|
109
111
|
workers: args.fetch(:workers) { itsifile_config.fetch(:workers, 1) },
|
110
112
|
worker_memory_limit: args.fetch(:worker_memory_limit) { itsifile_config.fetch(:worker_memory_limit, nil) },
|
data/lib/itsi/server/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itsi-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wouter Coppieters
|
@@ -51,6 +51,20 @@ dependencies:
|
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: 0.9.91
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: prism
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '1.4'
|
61
|
+
type: :runtime
|
62
|
+
prerelease: false
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '1.4'
|
54
68
|
- !ruby/object:Gem::Dependency
|
55
69
|
name: ruby-lsp
|
56
70
|
requirement: !ruby/object:Gem::Requirement
|