itsi-server 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 +3 -1
- data/exe/itsi +8 -5
- 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/http_request.rb +31 -39
- data/lib/itsi/http_response.rb +5 -0
- data/lib/itsi/rack_env_pool.rb +59 -0
- data/lib/itsi/server/config/dsl.rb +6 -4
- data/lib/itsi/server/config/middleware/compression.md +3 -3
- data/lib/itsi/server/config/middleware/endpoint/controller.md +1 -1
- data/lib/itsi/server/config/middleware/proxy.md +2 -2
- data/lib/itsi/server/config/middleware/proxy.rb +1 -1
- data/lib/itsi/server/config/middleware/rackup_file.rb +2 -2
- data/lib/itsi/server/config/options/auto_reload_config.rb +11 -6
- data/lib/itsi/server/config/options/include.md +1 -0
- data/lib/itsi/server/config/options/include.rb +13 -8
- data/lib/itsi/server/config/options/pipeline_flush.md +16 -0
- data/lib/itsi/server/config/options/pipeline_flush.rb +19 -0
- data/lib/itsi/server/config/options/reuse_port.rb +2 -4
- data/lib/itsi/server/config/options/writev.md +25 -0
- data/lib/itsi/server/config/options/writev.rb +19 -0
- data/lib/itsi/server/config.rb +22 -9
- data/lib/itsi/server/default_config/Itsi.rb +9 -8
- data/lib/itsi/server/grpc/grpc_call.rb +2 -0
- data/lib/itsi/server/grpc/grpc_interface.rb +2 -2
- data/lib/itsi/server/rack/handler/itsi.rb +3 -1
- data/lib/itsi/server/rack_interface.rb +17 -12
- data/lib/itsi/server/scheduler_interface.rb +2 -0
- data/lib/itsi/server/version.rb +1 -1
- data/lib/itsi/server.rb +1 -0
- data/lib/ruby_lsp/itsi/addon.rb +12 -13
- metadata +7 -1
@@ -0,0 +1,19 @@
|
|
1
|
+
module Itsi
|
2
|
+
class Server
|
3
|
+
module Config
|
4
|
+
class Writev < Option
|
5
|
+
|
6
|
+
insert_text <<~SNIPPET
|
7
|
+
writev ${1|true,false|}
|
8
|
+
SNIPPET
|
9
|
+
|
10
|
+
detail "Set whether HTTP/1 connections should try to use vectored writes"
|
11
|
+
|
12
|
+
schema do
|
13
|
+
(Bool() & Required()).default(false)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/itsi/server/config.rb
CHANGED
@@ -44,9 +44,9 @@ module Itsi
|
|
44
44
|
rate_limit key: "address", store_config: "in_memory", requests: 5, seconds: 10
|
45
45
|
etag type: "strong", algorithm: "md5", min_body_size: 1024 * 1024
|
46
46
|
compress min_size: 1024 * 1024, level: "fastest", algorithms: %w[zstd gzip br deflate],
|
47
|
-
|
47
|
+
mime_types: %w[all], compress_streams: true
|
48
48
|
log_requests before: { level: "DEBUG", format: "[{request_id}] {method} {path_and_query} - {addr} " },
|
49
|
-
|
49
|
+
after: { level: "DEBUG",
|
50
50
|
format: "[{request_id}] └─ {status} in {response_time}" }
|
51
51
|
nodelay false
|
52
52
|
static_assets \
|
@@ -65,14 +65,19 @@ module Itsi
|
|
65
65
|
}
|
66
66
|
end
|
67
67
|
elsif File.exist?(config_file_path.to_s)
|
68
|
-
DSL.evaluate
|
68
|
+
DSL.evaluate do
|
69
|
+
include config_file_path.gsub(".rb", "")
|
70
|
+
rackup_file args[:rackup_file], script_name: "/" if args.key?(:rackup_file)
|
71
|
+
end
|
69
72
|
elsif File.exist?("./config.ru")
|
70
73
|
DSL.evaluate do
|
71
74
|
preload true
|
72
|
-
rackup_file args.fetch(:rackup_file, "./config.ru")
|
75
|
+
rackup_file args.fetch(:rackup_file, "./config.ru"), script_name: "/"
|
73
76
|
end
|
74
77
|
else
|
75
|
-
DSL.evaluate
|
78
|
+
DSL.evaluate do
|
79
|
+
rackup_file args[:rackup_file], script_name: "/" if args.key?(:rackup_file)
|
80
|
+
end
|
76
81
|
end
|
77
82
|
|
78
83
|
itsifile_config.transform_keys!(&:to_sym)
|
@@ -92,7 +97,7 @@ module Itsi
|
|
92
97
|
errors << [e, e.backtrace[0]]
|
93
98
|
end
|
94
99
|
# If we're just preloading a specific gem group, we'll do that here too
|
95
|
-
when Symbol
|
100
|
+
when Symbol, String
|
96
101
|
Itsi.log_debug("Preloading gem group #{preload}")
|
97
102
|
Bundler.require(preload)
|
98
103
|
end
|
@@ -106,7 +111,7 @@ module Itsi
|
|
106
111
|
end
|
107
112
|
|
108
113
|
srv_config = {
|
109
|
-
workers: args.fetch(:workers) { itsifile_config.fetch(:workers,
|
114
|
+
workers: args.fetch(:workers) { itsifile_config.fetch(:workers, nil) },
|
110
115
|
worker_memory_limit: args.fetch(:worker_memory_limit) { itsifile_config.fetch(:worker_memory_limit, nil) },
|
111
116
|
silence: args.fetch(:silence) { itsifile_config.fetch(:silence, false) },
|
112
117
|
shutdown_timeout: args.fetch(:shutdown_timeout) { itsifile_config.fetch(:shutdown_timeout, 5) },
|
@@ -127,7 +132,7 @@ module Itsi
|
|
127
132
|
multithreaded_reactor: args.fetch(:multithreaded_reactor) do
|
128
133
|
itsifile_config.fetch(:multithreaded_reactor, nil)
|
129
134
|
end,
|
130
|
-
pin_worker_cores: args.fetch(:pin_worker_cores) { itsifile_config.fetch(:pin_worker_cores,
|
135
|
+
pin_worker_cores: args.fetch(:pin_worker_cores) { itsifile_config.fetch(:pin_worker_cores, false) },
|
131
136
|
scheduler_class: args.fetch(:scheduler_class) { itsifile_config.fetch(:scheduler_class, nil) },
|
132
137
|
oob_gc_responses_threshold: args.fetch(:oob_gc_responses_threshold) do
|
133
138
|
itsifile_config.fetch(:oob_gc_responses_threshold, nil)
|
@@ -139,9 +144,15 @@ module Itsi
|
|
139
144
|
log_format: args.fetch(:log_format) { itsifile_config.fetch(:log_format, nil) },
|
140
145
|
log_target: args.fetch(:log_target) { itsifile_config.fetch(:log_target, nil) },
|
141
146
|
log_target_filters: args.fetch(:log_target_filters) { itsifile_config.fetch(:log_target_filters, nil) },
|
147
|
+
pipeline_flush: itsifile_config.fetch(:pipeline_flush, true),
|
148
|
+
writev: itsifile_config.fetch(:writev, false),
|
149
|
+
max_concurrent_streams: itsifile_config.fetch(:max_concurrent_streams, nil),
|
150
|
+
max_local_error_reset_streams: itsifile_config.fetch(:max_local_error_reset_streams, nil),
|
151
|
+
max_header_list_size: itsifile_config.fetch(:max_header_list_size, 2 * 1024 * 1024),
|
152
|
+
max_send_buf_size: itsifile_config.fetch(:max_send_buf_size, 64 * 1024),
|
142
153
|
binds: args.fetch(:binds) { itsifile_config.fetch(:binds, ["http://0.0.0.0:3000"]) },
|
143
154
|
middleware_loader: middleware_loader,
|
144
|
-
listeners: args.fetch(:listeners
|
155
|
+
listeners: args.fetch(:listeners, nil),
|
145
156
|
reuse_address: itsifile_config.fetch(:reuse_address, true),
|
146
157
|
reuse_port: itsifile_config.fetch(:reuse_port, true),
|
147
158
|
listen_backlog: itsifile_config.fetch(:listen_backlog, 1024),
|
@@ -222,6 +233,8 @@ module Itsi
|
|
222
233
|
|
223
234
|
# Find config file path, if it exists.
|
224
235
|
def self.config_file_path(config_file_path = nil)
|
236
|
+
raise "Config file #{config_file_path} does not exist" if config_file_path && !File.exist?(config_file_path)
|
237
|
+
|
225
238
|
config_file_path ||= \
|
226
239
|
if File.exist?(ITSI_DEFAULT_CONFIG_FILE)
|
227
240
|
ITSI_DEFAULT_CONFIG_FILE
|
@@ -10,10 +10,7 @@ env = ENV.fetch("APP_ENV") { ENV.fetch("RACK_ENV", "development") }
|
|
10
10
|
|
11
11
|
# Number of worker processes to spawn
|
12
12
|
# If more than 1, Itsi will be booted in Cluster mode
|
13
|
-
workers ENV
|
14
|
-
require "etc"
|
15
|
-
env == "development" ? 1 : nil
|
16
|
-
}
|
13
|
+
workers ENV["ITSI_WORKERS"]&.to_i || (env == "development" ? 1 : nil)
|
17
14
|
|
18
15
|
# Number of threads to spawn per worker process
|
19
16
|
# For pure CPU bound applicationss, you'll get the best results keeping this number low
|
@@ -30,11 +27,13 @@ threads ENV.fetch("ITSI_THREADS", 3)
|
|
30
27
|
fiber_scheduler nil
|
31
28
|
|
32
29
|
# If you bind to https, without specifying a certificate, Itsi will use a self-signed certificate.
|
33
|
-
# The self-signed certificate will use a CA generated for your
|
30
|
+
# The self-signed certificate will use a CA generated for your
|
31
|
+
# host and stored inside `ITSI_LOCAL_CA_DIR` (Defaults to ~/.itsi)
|
34
32
|
# bind "https://0.0.0.0:3000"
|
35
33
|
# bind "https://0.0.0.0:3000?domains=dev.itsi.fyi"
|
36
34
|
#
|
37
|
-
# If you want to use let's encrypt to generate you a real certificate you
|
35
|
+
# If you want to use let's encrypt to generate you a real certificate you
|
36
|
+
# and pass cert=acme and an acme_email address to generate one.
|
38
37
|
# bind "https://itsi.fyi?cert=acme&acme_email=admin@itsi.fyi"
|
39
38
|
# You can generate certificates for multiple domains at once, by passing a comma-separated list of domains
|
40
39
|
# bind "https://0.0.0.0?domains=foo.itsi.fyi,bar.itsi.fyi&cert=acme&acme_email=admin@itsi.fyi"
|
@@ -71,7 +70,8 @@ preload true
|
|
71
70
|
# all of them at once, if they reach the threshold simultaneously.
|
72
71
|
worker_memory_limit 1024 * 1024 * 1024
|
73
72
|
|
74
|
-
# You can provide an optional block of code to run, when a worker hits its memory threshold
|
73
|
+
# You can provide an optional block of code to run, when a worker hits its memory threshold
|
74
|
+
# (Use this to send yourself an alert,
|
75
75
|
# write metrics to disk etc. etc.)
|
76
76
|
after_memory_limit_reached do |pid|
|
77
77
|
puts "Worker #{pid} has reached its memory threshold and will restart"
|
@@ -88,7 +88,8 @@ after_fork {}
|
|
88
88
|
shutdown_timeout 5
|
89
89
|
|
90
90
|
# Set this to false for application environments that require rack.input to be a rewindable body
|
91
|
-
# (like Rails). For rack applications that can stream inputs, you can set this to true for a more
|
91
|
+
# (like Rails). For rack applications that can stream inputs, you can set this to true for a more
|
92
|
+
# memory-efficient approach.
|
92
93
|
stream_body false
|
93
94
|
|
94
95
|
# OOB GC responses threshold
|
@@ -79,7 +79,7 @@ module Itsi
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def handle_client_streaming(active_call)
|
82
|
-
response = service.send(active_call.method_name, active_call
|
82
|
+
response = service.send(active_call.method_name, active_call)
|
83
83
|
active_call.remote_send(response)
|
84
84
|
end
|
85
85
|
|
@@ -94,7 +94,7 @@ module Itsi
|
|
94
94
|
end
|
95
95
|
|
96
96
|
def handle_bidi_streaming(active_call)
|
97
|
-
result = service.send(active_call.method_name, active_call.
|
97
|
+
result = service.send(active_call.method_name, active_call.each, active_call) do |response|
|
98
98
|
active_call.remote_send(response)
|
99
99
|
end
|
100
100
|
return unless result.is_a?(Enumerator)
|
@@ -12,7 +12,7 @@ module Itsi
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
lambda do |request|
|
15
|
-
Server.respond(request, app.call(request.to_rack_env))
|
15
|
+
Server.respond(request, app.call(env = request.to_rack_env), env)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -20,14 +20,14 @@ module Itsi
|
|
20
20
|
# Here we build the env, and invoke the Rack app's call method.
|
21
21
|
# We then turn the Rack response into something Itsi server understands.
|
22
22
|
def call(app, request)
|
23
|
-
respond request, app.call(request.to_rack_env)
|
23
|
+
respond request, app.call(env = request.to_rack_env), env
|
24
24
|
end
|
25
25
|
|
26
26
|
# Itsi responses are asynchronous and can be streamed.
|
27
27
|
# Response chunks are sent using response.send_frame
|
28
28
|
# and the response is finished using response.close_write.
|
29
29
|
# If only a single chunk is written, you can use the #send_and_close method.
|
30
|
-
def respond(request, (status, headers, body))
|
30
|
+
def respond(request, (status, headers, body), env)
|
31
31
|
response = request.response
|
32
32
|
|
33
33
|
# Don't try and respond if we've been hijacked.
|
@@ -39,13 +39,16 @@ module Itsi
|
|
39
39
|
|
40
40
|
# 2. Set Headers
|
41
41
|
body_streamer = streaming_body?(body) ? body : headers.delete("rack.hijack")
|
42
|
-
|
43
|
-
|
42
|
+
|
43
|
+
response.reserve_headers(headers.size)
|
44
|
+
|
45
|
+
for key, value in headers
|
46
|
+
case value
|
47
|
+
when String then response[key] = value
|
48
|
+
when Array
|
44
49
|
value.each do |v|
|
45
50
|
response[key] = v
|
46
51
|
end
|
47
|
-
elsif value.is_a?(String)
|
48
|
-
response[key] = value
|
49
52
|
end
|
50
53
|
end
|
51
54
|
|
@@ -53,15 +56,15 @@ module Itsi
|
|
53
56
|
# As soon as we start setting the response
|
54
57
|
# the server will begin to stream it to the client.
|
55
58
|
|
56
|
-
# If we're partially hijacked or returned a streaming body,
|
57
|
-
# stream this response.
|
58
59
|
|
59
60
|
if body_streamer
|
61
|
+
# If we're partially hijacked or returned a streaming body,
|
62
|
+
# stream this response.
|
60
63
|
body_streamer.call(response)
|
61
64
|
|
62
|
-
# If we're enumerable with more than one chunk
|
63
|
-
# also stream, otherwise write in a single chunk
|
64
65
|
elsif body.respond_to?(:each) || body.respond_to?(:to_ary)
|
66
|
+
# If we're enumerable with more than one chunk
|
67
|
+
# also stream, otherwise write in a single chunk
|
65
68
|
unless body.respond_to?(:each)
|
66
69
|
body = body.to_ary
|
67
70
|
raise "Body #to_ary didn't return an array" unless body.is_a?(Array)
|
@@ -78,8 +81,10 @@ module Itsi
|
|
78
81
|
else
|
79
82
|
response.send_and_close(body.to_s)
|
80
83
|
end
|
84
|
+
rescue EOFError
|
85
|
+
response.close
|
81
86
|
ensure
|
82
|
-
|
87
|
+
RackEnvPool.checkin(env)
|
83
88
|
body.close if body.respond_to?(:close)
|
84
89
|
end
|
85
90
|
|
data/lib/itsi/server/version.rb
CHANGED
data/lib/itsi/server.rb
CHANGED
@@ -12,6 +12,7 @@ require_relative "server/rack/handler/itsi"
|
|
12
12
|
require_relative "server/config"
|
13
13
|
require_relative "server/typed_handlers"
|
14
14
|
require_relative "standard_headers"
|
15
|
+
require_relative "rack_env_pool"
|
15
16
|
require_relative "http_request"
|
16
17
|
require_relative "http_response"
|
17
18
|
require_relative "passfile"
|
data/lib/ruby_lsp/itsi/addon.rb
CHANGED
@@ -5,8 +5,8 @@ require "itsi/server"
|
|
5
5
|
|
6
6
|
module RubyLsp
|
7
7
|
module Itsi
|
8
|
-
class Addon < ::RubyLsp::Addon
|
9
|
-
def activate(
|
8
|
+
class Addon < ::RubyLsp::Addon # rubocop:disable Style/Documentation
|
9
|
+
def activate(_global_state, message_queue)
|
10
10
|
@message_queue = message_queue
|
11
11
|
end
|
12
12
|
|
@@ -20,33 +20,34 @@ module RubyLsp
|
|
20
20
|
"0.1.0"
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
23
|
def create_completion_listener(response_builder, node_context, dispatcher, uri)
|
25
|
-
return unless uri.to_s.
|
24
|
+
return unless uri.to_s =~ /itsi.rb$/i
|
25
|
+
|
26
26
|
@in_itsi_file = true
|
27
27
|
CompletionListener.new(response_builder, node_context, dispatcher, uri)
|
28
28
|
end
|
29
29
|
|
30
30
|
def create_hover_listener(response_builder, node_context, dispatcher)
|
31
31
|
hl = dispatcher.listeners[:on_call_node_enter].find { |c| c.is_a?(RubyLsp::Listeners::Hover) }
|
32
|
-
return unless hl.instance_variable_get("@path").to_s.
|
32
|
+
return unless hl.instance_variable_get("@path").to_s =~ /itsi.rb$/i
|
33
|
+
|
33
34
|
HoverListener.new(response_builder, node_context, dispatcher)
|
34
35
|
end
|
35
36
|
end
|
36
37
|
|
37
|
-
class HoverListener
|
38
|
+
class HoverListener # rubocop:disable Style/Documentation
|
38
39
|
def initialize(response_builder, node_context, dispatcher)
|
39
40
|
@response_builder = response_builder
|
40
41
|
@node_context = node_context
|
41
42
|
@dispatcher = dispatcher
|
42
43
|
|
43
|
-
@options_by_name = ::Itsi::Server::Config::Option.subclasses.group_by(&:option_name).
|
44
|
-
@middlewares_by_name = ::Itsi::Server::Config::Middleware.subclasses.group_by(&:middleware_name).
|
44
|
+
@options_by_name = ::Itsi::Server::Config::Option.subclasses.group_by(&:option_name).transform_values(&:first)
|
45
|
+
@middlewares_by_name = ::Itsi::Server::Config::Middleware.subclasses.group_by(&:middleware_name).transform_values(&:first)
|
45
46
|
# Register for call nodes for hover events
|
46
47
|
dispatcher.register(self, :on_call_node_enter)
|
47
48
|
end
|
48
49
|
|
49
|
-
def on_call_node_enter(node)
|
50
|
+
def on_call_node_enter(node) # rubocop:disable Metrics/MethodLength
|
50
51
|
if (matched_class = @options_by_name[node.message.to_sym])
|
51
52
|
@response_builder.push(
|
52
53
|
matched_class.documentation,
|
@@ -61,7 +62,7 @@ module RubyLsp
|
|
61
62
|
end
|
62
63
|
end
|
63
64
|
|
64
|
-
class CompletionListener
|
65
|
+
class CompletionListener # rubocop:disable Style/Documentation
|
65
66
|
def initialize(response_builder, node_context, dispatcher, uri)
|
66
67
|
@response_builder = response_builder
|
67
68
|
@node_context = node_context
|
@@ -74,7 +75,7 @@ module RubyLsp
|
|
74
75
|
dispatcher.register(self, :completion_item_resolve)
|
75
76
|
end
|
76
77
|
|
77
|
-
def on_call_node_enter(node)
|
78
|
+
def on_call_node_enter(node) # rubocop:disable Metrics/AbcSize
|
78
79
|
# Only handle method calls that are being typed (i.e. no arguments yet)
|
79
80
|
return unless node.arguments.nil?
|
80
81
|
|
@@ -122,8 +123,6 @@ module RubyLsp
|
|
122
123
|
end
|
123
124
|
end
|
124
125
|
end
|
125
|
-
|
126
|
-
|
127
126
|
end
|
128
127
|
end
|
129
128
|
end
|
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.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wouter Coppieters
|
@@ -197,6 +197,7 @@ files:
|
|
197
197
|
- ext/itsi_server/src/server/binds/tls.rs
|
198
198
|
- ext/itsi_server/src/server/binds/tls/locked_dir_cache.rs
|
199
199
|
- ext/itsi_server/src/server/byte_frame.rs
|
200
|
+
- ext/itsi_server/src/server/frame_stream.rs
|
200
201
|
- ext/itsi_server/src/server/http_message_types.rs
|
201
202
|
- ext/itsi_server/src/server/io_stream.rs
|
202
203
|
- ext/itsi_server/src/server/lifecycle_event.rs
|
@@ -260,6 +261,7 @@ files:
|
|
260
261
|
- lib/itsi/http_request/response_status_shortcodes.rb
|
261
262
|
- lib/itsi/http_response.rb
|
262
263
|
- lib/itsi/passfile.rb
|
264
|
+
- lib/itsi/rack_env_pool.rb
|
263
265
|
- lib/itsi/server.rb
|
264
266
|
- lib/itsi/server/config.rb
|
265
267
|
- lib/itsi/server/config/config_helpers.rb
|
@@ -486,6 +488,8 @@ files:
|
|
486
488
|
- lib/itsi/server/config/options/oob_gc_responses_threshold.rb
|
487
489
|
- lib/itsi/server/config/options/pin_worker_cores.md
|
488
490
|
- lib/itsi/server/config/options/pin_worker_cores.rb
|
491
|
+
- lib/itsi/server/config/options/pipeline_flush.md
|
492
|
+
- lib/itsi/server/config/options/pipeline_flush.rb
|
489
493
|
- lib/itsi/server/config/options/preload.md
|
490
494
|
- lib/itsi/server/config/options/preload.rb
|
491
495
|
- lib/itsi/server/config/options/recv_buffer_size.md
|
@@ -516,6 +520,8 @@ files:
|
|
516
520
|
- lib/itsi/server/config/options/worker_memory_limit.rb
|
517
521
|
- lib/itsi/server/config/options/workers.md
|
518
522
|
- lib/itsi/server/config/options/workers.rb
|
523
|
+
- lib/itsi/server/config/options/writev.md
|
524
|
+
- lib/itsi/server/config/options/writev.rb
|
519
525
|
- lib/itsi/server/config/typed_struct.rb
|
520
526
|
- lib/itsi/server/default_app/default_app.rb
|
521
527
|
- lib/itsi/server/default_app/index.html
|