itsi-server 0.2.14 → 0.2.16
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 +167 -218
- data/ext/itsi_scheduler/Cargo.toml +1 -1
- data/ext/itsi_server/Cargo.lock +1 -1
- data/ext/itsi_server/Cargo.toml +3 -2
- data/ext/itsi_server/extconf.rb +3 -1
- data/ext/itsi_server/src/lib.rs +1 -0
- data/ext/itsi_server/src/ruby_types/itsi_grpc_call.rs +2 -2
- data/ext/itsi_server/src/ruby_types/itsi_http_request.rs +9 -11
- data/ext/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +6 -1
- data/ext/itsi_server/src/server/binds/listener.rs +4 -1
- data/ext/itsi_server/src/server/http_message_types.rs +1 -1
- data/ext/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs +32 -34
- data/ext/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +3 -4
- data/ext/itsi_server/src/server/middleware_stack/middlewares/etag.rs +23 -38
- data/ext/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +65 -14
- data/ext/itsi_server/src/server/middleware_stack/middlewares/max_body.rs +1 -1
- data/ext/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +1 -1
- data/ext/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +21 -8
- data/ext/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +1 -5
- data/ext/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +8 -6
- data/ext/itsi_server/src/server/middleware_stack/middlewares/static_response.rs +12 -3
- data/ext/itsi_server/src/server/process_worker.rs +2 -1
- data/ext/itsi_server/src/server/serve_strategy/acceptor.rs +96 -0
- data/ext/itsi_server/src/server/serve_strategy/mod.rs +1 -0
- data/ext/itsi_server/src/server/serve_strategy/single_mode.rs +80 -136
- data/ext/itsi_server/src/server/thread_worker.rs +10 -3
- data/ext/itsi_server/src/services/itsi_http_service.rs +26 -21
- data/ext/itsi_server/src/services/mime_types.rs +2893 -1413
- data/ext/itsi_server/src/services/rate_limiter.rs +16 -34
- data/ext/itsi_server/src/services/static_file_server.rs +147 -121
- data/ext/itsi_tracing/Cargo.toml +1 -1
- data/lib/itsi/server/config/config_helpers.rb +1 -2
- data/lib/itsi/server/config/middleware/etag.md +3 -7
- data/lib/itsi/server/config/middleware/etag.rb +2 -4
- data/lib/itsi/server/config/options/listen_backlog.rb +1 -1
- data/lib/itsi/server/config/options/send_buffer_size.md +15 -0
- data/lib/itsi/server/config/options/send_buffer_size.rb +19 -0
- data/lib/itsi/server/config.rb +24 -25
- data/lib/itsi/server/route_tester.rb +1 -1
- data/lib/itsi/server/version.rb +1 -1
- metadata +21 -18
@@ -1,13 +1,11 @@
|
|
1
1
|
use crate::default_responses::{NOT_FOUND_RESPONSE, TIMEOUT_RESPONSE};
|
2
|
-
use crate::ruby_types::itsi_server::itsi_server_config::
|
3
|
-
use crate::server::binds::listener::ListenerInfo;
|
2
|
+
use crate::ruby_types::itsi_server::itsi_server_config::ItsiServerTokenPreference;
|
4
3
|
use crate::server::http_message_types::{
|
5
4
|
ConversionExt, HttpRequest, HttpResponse, RequestExt, ResponseFormat,
|
6
5
|
};
|
7
6
|
use crate::server::lifecycle_event::LifecycleEvent;
|
8
7
|
use crate::server::middleware_stack::MiddlewareLayer;
|
9
|
-
use crate::server::
|
10
|
-
use crate::server::serve_strategy::single_mode::RunningPhase;
|
8
|
+
use crate::server::serve_strategy::acceptor::AcceptorArgs;
|
11
9
|
use crate::server::signal::send_lifecycle_event;
|
12
10
|
use chrono::{self, DateTime, Local};
|
13
11
|
use either::Either;
|
@@ -23,7 +21,6 @@ use std::time::{Duration, Instant};
|
|
23
21
|
use tracing::error;
|
24
22
|
|
25
23
|
use std::{future::Future, ops::Deref, pin::Pin, sync::Arc};
|
26
|
-
use tokio::sync::watch::{self};
|
27
24
|
use tokio::time::timeout;
|
28
25
|
|
29
26
|
#[derive(Clone)]
|
@@ -40,12 +37,16 @@ impl Deref for ItsiHttpService {
|
|
40
37
|
}
|
41
38
|
|
42
39
|
pub struct ItsiHttpServiceInner {
|
43
|
-
pub
|
44
|
-
pub nonblocking_sender: async_channel::Sender<RequestJob>,
|
45
|
-
pub server_params: Arc<ServerParams>,
|
46
|
-
pub listener: Arc<ListenerInfo>,
|
40
|
+
pub acceptor_args: Arc<AcceptorArgs>,
|
47
41
|
pub addr: String,
|
48
|
-
|
42
|
+
}
|
43
|
+
|
44
|
+
impl Deref for ItsiHttpServiceInner {
|
45
|
+
type Target = Arc<AcceptorArgs>;
|
46
|
+
|
47
|
+
fn deref(&self) -> &Self::Target {
|
48
|
+
&self.acceptor_args
|
49
|
+
}
|
49
50
|
}
|
50
51
|
|
51
52
|
#[derive(Clone)]
|
@@ -178,26 +179,30 @@ impl Service<Request<Incoming>> for ItsiHttpService {
|
|
178
179
|
type Future = Pin<Box<dyn Future<Output = itsi_error::Result<HttpResponse>> + Send>>;
|
179
180
|
|
180
181
|
fn call(&self, req: Request<Incoming>) -> Self::Future {
|
181
|
-
let params = self.server_params.clone();
|
182
182
|
let self_clone = self.clone();
|
183
183
|
let mut req = req.limit();
|
184
184
|
let accept: ResponseFormat = req.accept().into();
|
185
|
-
let accept_clone = accept.clone();
|
186
185
|
let is_single_mode = self.server_params.workers == 1;
|
187
186
|
|
188
187
|
let request_timeout = self.server_params.request_timeout;
|
189
188
|
let is_ruby_request = Arc::new(AtomicBool::new(false));
|
190
189
|
let irr_clone = is_ruby_request.clone();
|
190
|
+
|
191
|
+
let token_preference = self.server_params.itsi_server_token_preference;
|
192
|
+
|
191
193
|
let service_future = async move {
|
194
|
+
let middleware_stack = self_clone
|
195
|
+
.server_params
|
196
|
+
.middleware
|
197
|
+
.get()
|
198
|
+
.unwrap()
|
199
|
+
.stack_for(&req)
|
200
|
+
.unwrap();
|
201
|
+
let (stack, matching_pattern) = middleware_stack;
|
192
202
|
let mut resp: Option<HttpResponse> = None;
|
193
|
-
let (stack, matching_pattern) = params.middleware.get().unwrap().stack_for(&req)?;
|
194
203
|
|
195
|
-
let mut context =
|
196
|
-
self_clone,
|
197
|
-
matching_pattern,
|
198
|
-
accept_clone.clone(),
|
199
|
-
irr_clone,
|
200
|
-
);
|
204
|
+
let mut context =
|
205
|
+
HttpRequestContext::new(self_clone.clone(), matching_pattern, accept, irr_clone);
|
201
206
|
let mut depth = 0;
|
202
207
|
|
203
208
|
for (index, elm) in stack.iter().enumerate() {
|
@@ -217,14 +222,14 @@ impl Service<Request<Incoming>> for ItsiHttpService {
|
|
217
222
|
|
218
223
|
let mut resp = match resp {
|
219
224
|
Some(r) => r,
|
220
|
-
None => return Ok(NOT_FOUND_RESPONSE.to_http_response(
|
225
|
+
None => return Ok(NOT_FOUND_RESPONSE.to_http_response(accept).await),
|
221
226
|
};
|
222
227
|
|
223
228
|
for elm in stack.iter().rev().skip(stack.len() - depth - 1) {
|
224
229
|
resp = elm.after(resp, &mut context).await;
|
225
230
|
}
|
226
231
|
|
227
|
-
match
|
232
|
+
match token_preference {
|
228
233
|
ItsiServerTokenPreference::Version => {
|
229
234
|
resp.headers_mut().insert("Server", SERVER_TOKEN_VERSION);
|
230
235
|
}
|