itsi-scheduler 0.2.16 → 0.2.18
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_acme/Cargo.toml +1 -1
- data/ext/itsi_scheduler/Cargo.toml +1 -1
- data/ext/itsi_server/Cargo.toml +3 -1
- data/ext/itsi_server/src/lib.rs +6 -1
- data/ext/itsi_server/src/ruby_types/itsi_body_proxy/mod.rs +2 -0
- data/ext/itsi_server/src/ruby_types/itsi_grpc_call.rs +4 -4
- data/ext/itsi_server/src/ruby_types/itsi_grpc_response_stream/mod.rs +14 -13
- data/ext/itsi_server/src/ruby_types/itsi_http_request.rs +64 -33
- data/ext/itsi_server/src/ruby_types/itsi_http_response.rs +151 -152
- data/ext/itsi_server/src/ruby_types/itsi_server/file_watcher.rs +422 -110
- data/ext/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +62 -15
- data/ext/itsi_server/src/ruby_types/itsi_server.rs +1 -1
- data/ext/itsi_server/src/server/binds/listener.rs +45 -7
- data/ext/itsi_server/src/server/frame_stream.rs +142 -0
- data/ext/itsi_server/src/server/http_message_types.rs +142 -9
- data/ext/itsi_server/src/server/io_stream.rs +28 -5
- data/ext/itsi_server/src/server/lifecycle_event.rs +1 -1
- data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs +2 -3
- data/ext/itsi_server/src/server/middleware_stack/middlewares/compression.rs +8 -10
- data/ext/itsi_server/src/server/middleware_stack/middlewares/cors.rs +2 -3
- data/ext/itsi_server/src/server/middleware_stack/middlewares/csp.rs +3 -3
- data/ext/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs +54 -56
- data/ext/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +5 -7
- data/ext/itsi_server/src/server/middleware_stack/middlewares/etag.rs +5 -5
- data/ext/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +7 -10
- data/ext/itsi_server/src/server/middleware_stack/middlewares/redirect.rs +2 -3
- data/ext/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +1 -2
- data/ext/itsi_server/src/server/middleware_stack/middlewares/static_response.rs +4 -6
- data/ext/itsi_server/src/server/mod.rs +1 -0
- data/ext/itsi_server/src/server/process_worker.rs +3 -4
- data/ext/itsi_server/src/server/serve_strategy/acceptor.rs +16 -12
- data/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +83 -31
- data/ext/itsi_server/src/server/serve_strategy/single_mode.rs +166 -142
- data/ext/itsi_server/src/server/signal.rs +37 -9
- data/ext/itsi_server/src/server/thread_worker.rs +84 -69
- data/ext/itsi_server/src/services/itsi_http_service.rs +43 -43
- data/ext/itsi_server/src/services/static_file_server.rs +28 -47
- data/lib/itsi/scheduler/version.rb +1 -1
- metadata +2 -1
@@ -2,7 +2,7 @@ use crate::{
|
|
2
2
|
default_responses::NOT_FOUND_RESPONSE,
|
3
3
|
prelude::*,
|
4
4
|
server::{
|
5
|
-
http_message_types::{HttpRequest, HttpResponse, RequestExt, ResponseFormat},
|
5
|
+
http_message_types::{HttpBody, HttpRequest, HttpResponse, RequestExt, ResponseFormat},
|
6
6
|
middleware_stack::ErrorResponse,
|
7
7
|
redirect_type::RedirectType,
|
8
8
|
},
|
@@ -16,7 +16,6 @@ use http::{
|
|
16
16
|
},
|
17
17
|
HeaderName, HeaderValue, Response, StatusCode,
|
18
18
|
};
|
19
|
-
use http_body_util::{combinators::BoxBody, Full};
|
20
19
|
use itsi_error::Result;
|
21
20
|
use parking_lot::{Mutex, RwLock};
|
22
21
|
use percent_encoding::percent_decode_str;
|
@@ -28,7 +27,6 @@ use std::{
|
|
28
27
|
borrow::Cow,
|
29
28
|
cmp::Ordering,
|
30
29
|
collections::HashMap,
|
31
|
-
convert::Infallible,
|
32
30
|
fs::Metadata,
|
33
31
|
ops::Deref,
|
34
32
|
path::{Path, PathBuf},
|
@@ -324,7 +322,7 @@ impl StaticFileServer {
|
|
324
322
|
}) => Response::builder()
|
325
323
|
.status(StatusCode::MOVED_PERMANENTLY)
|
326
324
|
.header(header::LOCATION, redirect_to)
|
327
|
-
.body(
|
325
|
+
.body(HttpBody::empty())
|
328
326
|
.unwrap(),
|
329
327
|
Err(not_found_behavior) => match not_found_behavior {
|
330
328
|
NotFoundBehavior::Error(error_response) => {
|
@@ -340,7 +338,7 @@ impl StaticFileServer {
|
|
340
338
|
NotFoundBehavior::Redirect(redirect) => Response::builder()
|
341
339
|
.status(redirect.r#type.status_code())
|
342
340
|
.header(header::LOCATION, redirect.to)
|
343
|
-
.body(
|
341
|
+
.body(HttpBody::empty())
|
344
342
|
.unwrap(),
|
345
343
|
},
|
346
344
|
})
|
@@ -407,7 +405,7 @@ impl StaticFileServer {
|
|
407
405
|
|
408
406
|
Response::builder()
|
409
407
|
.status(StatusCode::NOT_FOUND)
|
410
|
-
.body(
|
408
|
+
.body(HttpBody::empty())
|
411
409
|
.unwrap()
|
412
410
|
}
|
413
411
|
|
@@ -648,15 +646,8 @@ impl StaticFileServer {
|
|
648
646
|
Err(nf)
|
649
647
|
}
|
650
648
|
|
651
|
-
async fn stream_file_range(
|
652
|
-
&self,
|
653
|
-
path: PathBuf,
|
654
|
-
start: u64,
|
655
|
-
end: u64,
|
656
|
-
) -> Option<BoxBody<Bytes, Infallible>> {
|
649
|
+
async fn stream_file_range(&self, path: PathBuf, start: u64, end: u64) -> Option<HttpBody> {
|
657
650
|
use futures::TryStreamExt;
|
658
|
-
use http_body_util::StreamBody;
|
659
|
-
use hyper::body::Frame;
|
660
651
|
use tokio::io::AsyncSeekExt;
|
661
652
|
use tokio_util::io::ReaderStream;
|
662
653
|
|
@@ -687,32 +678,25 @@ impl StaticFileServer {
|
|
687
678
|
let range_length = end - start + 1;
|
688
679
|
let limited_reader = tokio::io::AsyncReadExt::take(file, range_length);
|
689
680
|
let path_clone = path.clone();
|
690
|
-
let stream = ReaderStream::with_capacity(limited_reader, 64 * 1024)
|
691
|
-
.
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
});
|
696
|
-
|
697
|
-
Some(BoxBody::new(StreamBody::new(stream)))
|
681
|
+
let stream = ReaderStream::with_capacity(limited_reader, 64 * 1024).map_err(move |e| {
|
682
|
+
warn!("Error streaming file {}: {}", path_clone.display(), e);
|
683
|
+
unreachable!("We handle IO errors above")
|
684
|
+
});
|
685
|
+
Some(HttpBody::stream(stream))
|
698
686
|
}
|
699
687
|
|
700
|
-
async fn stream_file(&self, path: PathBuf) -> Option<
|
688
|
+
async fn stream_file(&self, path: PathBuf) -> Option<HttpBody> {
|
701
689
|
use futures::TryStreamExt;
|
702
|
-
use http_body_util::StreamBody;
|
703
|
-
use hyper::body::Frame;
|
704
690
|
use tokio_util::io::ReaderStream;
|
705
691
|
|
706
692
|
match File::open(&path).await {
|
707
693
|
Ok(file) => {
|
708
694
|
let path_clone = path.clone();
|
709
|
-
let stream = ReaderStream::with_capacity(file, 64 * 1024)
|
710
|
-
.
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
});
|
715
|
-
Some(BoxBody::new(StreamBody::new(stream)))
|
695
|
+
let stream = ReaderStream::with_capacity(file, 64 * 1024).map_err(move |e| {
|
696
|
+
warn!("Error streaming file {}: {}", path_clone.display(), e);
|
697
|
+
unreachable!("We handle IO errors above")
|
698
|
+
});
|
699
|
+
Some(HttpBody::stream(stream))
|
716
700
|
}
|
717
701
|
Err(e) => {
|
718
702
|
warn!(
|
@@ -749,7 +733,7 @@ impl StaticFileServer {
|
|
749
733
|
return Response::builder()
|
750
734
|
.status(StatusCode::RANGE_NOT_SATISFIABLE)
|
751
735
|
.header("Content-Range", format!("bytes */{}", content_length))
|
752
|
-
.body(
|
736
|
+
.body(HttpBody::empty())
|
753
737
|
.unwrap();
|
754
738
|
}
|
755
739
|
|
@@ -795,7 +779,7 @@ impl StaticFileServer {
|
|
795
779
|
builder = builder.header("Content-Range", range);
|
796
780
|
}
|
797
781
|
|
798
|
-
return builder.body(
|
782
|
+
return builder.body(HttpBody::empty()).unwrap();
|
799
783
|
}
|
800
784
|
|
801
785
|
// For GET requests, prepare the actual content
|
@@ -829,10 +813,7 @@ impl StaticFileServer {
|
|
829
813
|
}
|
830
814
|
}
|
831
815
|
|
832
|
-
fn serve_cached_content(
|
833
|
-
&self,
|
834
|
-
serve_cache_args: ServeCacheArgs,
|
835
|
-
) -> http::Response<BoxBody<Bytes, Infallible>> {
|
816
|
+
fn serve_cached_content(&self, serve_cache_args: ServeCacheArgs) -> HttpResponse {
|
836
817
|
let ServeCacheArgs(
|
837
818
|
cache_entry,
|
838
819
|
start,
|
@@ -855,7 +836,7 @@ impl StaticFileServer {
|
|
855
836
|
return Response::builder()
|
856
837
|
.status(StatusCode::RANGE_NOT_SATISFIABLE)
|
857
838
|
.header("Content-Range", format!("bytes */{}", content_length))
|
858
|
-
.body(
|
839
|
+
.body(HttpBody::empty())
|
859
840
|
.unwrap();
|
860
841
|
}
|
861
842
|
|
@@ -904,7 +885,7 @@ impl StaticFileServer {
|
|
904
885
|
builder = builder.header("Content-Range", range);
|
905
886
|
}
|
906
887
|
|
907
|
-
return builder.body(
|
888
|
+
return builder.body(HttpBody::empty()).unwrap();
|
908
889
|
}
|
909
890
|
|
910
891
|
if is_range_request {
|
@@ -920,7 +901,7 @@ impl StaticFileServer {
|
|
920
901
|
cache_entry.last_modified_http_date.clone(),
|
921
902
|
content_range,
|
922
903
|
&self.headers,
|
923
|
-
|
904
|
+
HttpBody::full(range_bytes),
|
924
905
|
)
|
925
906
|
} else {
|
926
907
|
// Return the full content
|
@@ -987,15 +968,15 @@ fn format_http_date_header(time: SystemTime) -> HeaderValue {
|
|
987
968
|
.unwrap()
|
988
969
|
}
|
989
970
|
|
990
|
-
fn build_ok_body(bytes: Arc<Bytes>) ->
|
991
|
-
|
971
|
+
fn build_ok_body(bytes: Arc<Bytes>) -> HttpBody {
|
972
|
+
HttpBody::full(bytes.as_ref().clone())
|
992
973
|
}
|
993
974
|
|
994
975
|
// Helper function to handle not modified responses
|
995
|
-
fn build_not_modified_response() ->
|
976
|
+
fn build_not_modified_response() -> HttpResponse {
|
996
977
|
Response::builder()
|
997
978
|
.status(StatusCode::NOT_MODIFIED)
|
998
|
-
.body(
|
979
|
+
.body(HttpBody::empty())
|
999
980
|
.unwrap()
|
1000
981
|
}
|
1001
982
|
|
@@ -1009,8 +990,8 @@ fn build_file_response(
|
|
1009
990
|
last_modified_http_date: HeaderValue,
|
1010
991
|
range_header: Option<String>,
|
1011
992
|
headers: &Option<HashMap<String, String>>,
|
1012
|
-
body:
|
1013
|
-
) ->
|
993
|
+
body: HttpBody,
|
994
|
+
) -> HttpResponse {
|
1014
995
|
let mut response = Response::new(body);
|
1015
996
|
|
1016
997
|
*response.status_mut() = status;
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itsi-scheduler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wouter Coppieters
|
@@ -120,6 +120,7 @@ files:
|
|
120
120
|
- ext/itsi_server/src/server/binds/tls.rs
|
121
121
|
- ext/itsi_server/src/server/binds/tls/locked_dir_cache.rs
|
122
122
|
- ext/itsi_server/src/server/byte_frame.rs
|
123
|
+
- ext/itsi_server/src/server/frame_stream.rs
|
123
124
|
- ext/itsi_server/src/server/http_message_types.rs
|
124
125
|
- ext/itsi_server/src/server/io_stream.rs
|
125
126
|
- ext/itsi_server/src/server/lifecycle_event.rs
|