puma 6.4.3 → 8.0.2
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/History.md +448 -8
- data/README.md +110 -51
- data/docs/5.0-Upgrade.md +98 -0
- data/docs/6.0-Upgrade.md +56 -0
- data/docs/7.0-Upgrade.md +52 -0
- data/docs/8.0-Upgrade.md +100 -0
- data/docs/deployment.md +58 -23
- data/docs/fork_worker.md +11 -1
- data/docs/grpc.md +62 -0
- data/docs/images/favicon.svg +1 -0
- data/docs/images/running-puma.svg +1 -0
- data/docs/images/standard-logo.svg +1 -0
- data/docs/java_options.md +54 -0
- data/docs/jungle/README.md +1 -1
- data/docs/kubernetes.md +11 -16
- data/docs/plugins.md +6 -2
- data/docs/restart.md +2 -2
- data/docs/signals.md +21 -21
- data/docs/stats.md +11 -5
- data/docs/systemd.md +14 -5
- data/ext/puma_http11/extconf.rb +20 -32
- data/ext/puma_http11/http11_parser.java.rl +51 -65
- data/ext/puma_http11/mini_ssl.c +29 -9
- data/ext/puma_http11/org/jruby/puma/EnvKey.java +241 -0
- data/ext/puma_http11/org/jruby/puma/Http11.java +194 -101
- data/ext/puma_http11/org/jruby/puma/Http11Parser.java +71 -85
- data/ext/puma_http11/puma_http11.c +125 -118
- data/lib/puma/app/status.rb +11 -3
- data/lib/puma/binder.rb +22 -12
- data/lib/puma/cli.rb +11 -9
- data/lib/puma/client.rb +233 -136
- data/lib/puma/client_env.rb +171 -0
- data/lib/puma/cluster/worker.rb +24 -21
- data/lib/puma/cluster/worker_handle.rb +38 -8
- data/lib/puma/cluster.rb +74 -48
- data/lib/puma/cluster_accept_loop_delay.rb +91 -0
- data/lib/puma/commonlogger.rb +3 -3
- data/lib/puma/configuration.rb +197 -64
- data/lib/puma/const.rb +23 -12
- data/lib/puma/control_cli.rb +11 -7
- data/lib/puma/detect.rb +13 -0
- data/lib/puma/dsl.rb +483 -127
- data/lib/puma/error_logger.rb +7 -5
- data/lib/puma/events.rb +25 -10
- data/lib/puma/io_buffer.rb +8 -4
- data/lib/puma/jruby_restart.rb +0 -16
- data/lib/puma/launcher/bundle_pruner.rb +3 -5
- data/lib/puma/launcher.rb +76 -59
- data/lib/puma/log_writer.rb +17 -11
- data/lib/puma/minissl/context_builder.rb +1 -0
- data/lib/puma/minissl.rb +1 -1
- data/lib/puma/null_io.rb +26 -0
- data/lib/puma/plugin/systemd.rb +3 -3
- data/lib/puma/rack/urlmap.rb +1 -1
- data/lib/puma/reactor.rb +19 -13
- data/lib/puma/{request.rb → response.rb} +57 -209
- data/lib/puma/runner.rb +15 -17
- data/lib/puma/sd_notify.rb +1 -4
- data/lib/puma/server.rb +200 -104
- data/lib/puma/server_plugin_control.rb +32 -0
- data/lib/puma/single.rb +7 -4
- data/lib/puma/state_file.rb +3 -2
- data/lib/puma/thread_pool.rb +179 -96
- data/lib/puma/util.rb +0 -7
- data/lib/puma.rb +10 -0
- data/lib/rack/handler/puma.rb +11 -8
- data/tools/Dockerfile +15 -5
- metadata +26 -16
- data/ext/puma_http11/ext_help.h +0 -15
|
@@ -4,6 +4,7 @@ package org.jruby.puma;
|
|
|
4
4
|
|
|
5
5
|
import org.jruby.Ruby;
|
|
6
6
|
import org.jruby.RubyHash;
|
|
7
|
+
import org.jruby.RubyString;
|
|
7
8
|
import org.jruby.util.ByteList;
|
|
8
9
|
|
|
9
10
|
public class Http11Parser {
|
|
@@ -11,12 +12,12 @@ public class Http11Parser {
|
|
|
11
12
|
/** Machine **/
|
|
12
13
|
|
|
13
14
|
|
|
14
|
-
// line
|
|
15
|
+
// line 59 "ext/puma_http11/http11_parser.java.rl"
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
/** Data **/
|
|
18
19
|
|
|
19
|
-
// line
|
|
20
|
+
// line 21 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
|
|
20
21
|
private static byte[] init__puma_parser_actions_0()
|
|
21
22
|
{
|
|
22
23
|
return new byte [] {
|
|
@@ -185,66 +186,51 @@ static final int puma_parser_first_final = 46;
|
|
|
185
186
|
static final int puma_parser_error = 0;
|
|
186
187
|
|
|
187
188
|
|
|
188
|
-
// line
|
|
189
|
+
// line 63 "ext/puma_http11/http11_parser.java.rl"
|
|
189
190
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
public static class HttpParser {
|
|
199
|
-
int cs;
|
|
200
|
-
int body_start;
|
|
201
|
-
int content_len;
|
|
202
|
-
int nread;
|
|
203
|
-
int mark;
|
|
204
|
-
int field_start;
|
|
205
|
-
int field_len;
|
|
206
|
-
int query_start;
|
|
191
|
+
int cs;
|
|
192
|
+
int body_start;
|
|
193
|
+
int nread;
|
|
194
|
+
int mark;
|
|
195
|
+
int field_start;
|
|
196
|
+
int field_len;
|
|
197
|
+
int query_start;
|
|
207
198
|
|
|
208
|
-
|
|
209
|
-
|
|
199
|
+
RubyHash data;
|
|
200
|
+
byte[] buffer;
|
|
210
201
|
|
|
211
|
-
|
|
212
|
-
cs = 0;
|
|
202
|
+
public void init() {
|
|
213
203
|
|
|
214
|
-
|
|
215
|
-
// line
|
|
204
|
+
|
|
205
|
+
// line 206 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
|
|
216
206
|
{
|
|
217
207
|
cs = puma_parser_start;
|
|
218
208
|
}
|
|
219
209
|
|
|
220
|
-
// line
|
|
210
|
+
// line 78 "ext/puma_http11/http11_parser.java.rl"
|
|
221
211
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
field_start = 0;
|
|
228
|
-
}
|
|
212
|
+
body_start = 0;
|
|
213
|
+
mark = 0;
|
|
214
|
+
nread = 0;
|
|
215
|
+
field_len = 0;
|
|
216
|
+
field_start = 0;
|
|
229
217
|
}
|
|
230
218
|
|
|
231
|
-
public final HttpParser parser = new HttpParser();
|
|
232
|
-
|
|
233
219
|
public int execute(Ruby runtime, Http11 http, ByteList buffer, int off) {
|
|
234
220
|
int p, pe;
|
|
235
|
-
int cs =
|
|
221
|
+
int cs = this.cs;
|
|
236
222
|
int len = buffer.length();
|
|
223
|
+
int beg = buffer.begin();
|
|
224
|
+
RubyString[] envStrings = http.envStrings;
|
|
237
225
|
assert off<=len : "offset past end of buffer";
|
|
238
226
|
|
|
239
|
-
p = off;
|
|
240
|
-
pe = len;
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
byte[] data = buffer.bytes();
|
|
244
|
-
parser.buffer = buffer;
|
|
227
|
+
p = beg + off;
|
|
228
|
+
pe = beg + len;
|
|
229
|
+
byte[] data = buffer.unsafeBytes();
|
|
230
|
+
this.buffer = data;
|
|
245
231
|
|
|
246
232
|
|
|
247
|
-
// line
|
|
233
|
+
// line 234 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
|
|
248
234
|
{
|
|
249
235
|
int _klen;
|
|
250
236
|
int _trans = 0;
|
|
@@ -325,82 +311,82 @@ case 1:
|
|
|
325
311
|
switch ( _puma_parser_actions[_acts++] )
|
|
326
312
|
{
|
|
327
313
|
case 0:
|
|
328
|
-
// line
|
|
329
|
-
{
|
|
314
|
+
// line 16 "ext/puma_http11/http11_parser.java.rl"
|
|
315
|
+
{this.mark = p; }
|
|
330
316
|
break;
|
|
331
317
|
case 1:
|
|
332
|
-
// line
|
|
333
|
-
{
|
|
318
|
+
// line 18 "ext/puma_http11/http11_parser.java.rl"
|
|
319
|
+
{ this.field_start = p; }
|
|
334
320
|
break;
|
|
335
321
|
case 2:
|
|
336
|
-
// line
|
|
337
|
-
{ /*
|
|
322
|
+
// line 19 "ext/puma_http11/http11_parser.java.rl"
|
|
323
|
+
{ /* done lazily as needed */ }
|
|
338
324
|
break;
|
|
339
325
|
case 3:
|
|
340
|
-
// line
|
|
326
|
+
// line 20 "ext/puma_http11/http11_parser.java.rl"
|
|
341
327
|
{
|
|
342
|
-
|
|
328
|
+
this.field_len = p-this.field_start;
|
|
343
329
|
}
|
|
344
330
|
break;
|
|
345
331
|
case 4:
|
|
346
|
-
// line
|
|
347
|
-
{
|
|
332
|
+
// line 24 "ext/puma_http11/http11_parser.java.rl"
|
|
333
|
+
{ this.mark = p; }
|
|
348
334
|
break;
|
|
349
335
|
case 5:
|
|
350
|
-
// line
|
|
336
|
+
// line 25 "ext/puma_http11/http11_parser.java.rl"
|
|
351
337
|
{
|
|
352
|
-
Http11.http_field(runtime,
|
|
338
|
+
Http11.http_field(runtime, envStrings, this, p-this.mark);
|
|
353
339
|
}
|
|
354
340
|
break;
|
|
355
341
|
case 6:
|
|
356
|
-
// line
|
|
342
|
+
// line 28 "ext/puma_http11/http11_parser.java.rl"
|
|
357
343
|
{
|
|
358
|
-
Http11.request_method(runtime,
|
|
344
|
+
Http11.request_method(runtime, envStrings, this, p-this.mark);
|
|
359
345
|
}
|
|
360
346
|
break;
|
|
361
347
|
case 7:
|
|
362
|
-
// line
|
|
348
|
+
// line 31 "ext/puma_http11/http11_parser.java.rl"
|
|
363
349
|
{
|
|
364
|
-
Http11.request_uri(runtime,
|
|
350
|
+
Http11.request_uri(runtime, envStrings, this, p-this.mark);
|
|
365
351
|
}
|
|
366
352
|
break;
|
|
367
353
|
case 8:
|
|
368
|
-
// line
|
|
354
|
+
// line 34 "ext/puma_http11/http11_parser.java.rl"
|
|
369
355
|
{
|
|
370
|
-
Http11.fragment(runtime,
|
|
356
|
+
Http11.fragment(runtime, envStrings, this, p-this.mark);
|
|
371
357
|
}
|
|
372
358
|
break;
|
|
373
359
|
case 9:
|
|
374
|
-
// line
|
|
375
|
-
{
|
|
360
|
+
// line 38 "ext/puma_http11/http11_parser.java.rl"
|
|
361
|
+
{this.query_start = p; }
|
|
376
362
|
break;
|
|
377
363
|
case 10:
|
|
378
|
-
// line
|
|
364
|
+
// line 39 "ext/puma_http11/http11_parser.java.rl"
|
|
379
365
|
{
|
|
380
|
-
Http11.query_string(runtime,
|
|
366
|
+
Http11.query_string(runtime, envStrings, this, p-this.query_start);
|
|
381
367
|
}
|
|
382
368
|
break;
|
|
383
369
|
case 11:
|
|
384
|
-
// line
|
|
370
|
+
// line 43 "ext/puma_http11/http11_parser.java.rl"
|
|
385
371
|
{
|
|
386
|
-
Http11.server_protocol(runtime,
|
|
372
|
+
Http11.server_protocol(runtime, envStrings, this, p-this.mark);
|
|
387
373
|
}
|
|
388
374
|
break;
|
|
389
375
|
case 12:
|
|
390
|
-
// line
|
|
376
|
+
// line 47 "ext/puma_http11/http11_parser.java.rl"
|
|
391
377
|
{
|
|
392
|
-
Http11.request_path(runtime,
|
|
378
|
+
Http11.request_path(runtime, envStrings, this, p-this.mark);
|
|
393
379
|
}
|
|
394
380
|
break;
|
|
395
381
|
case 13:
|
|
396
|
-
// line
|
|
382
|
+
// line 51 "ext/puma_http11/http11_parser.java.rl"
|
|
397
383
|
{
|
|
398
|
-
|
|
399
|
-
http.header_done(runtime,
|
|
384
|
+
this.body_start = p + 1;
|
|
385
|
+
http.header_done(runtime, this, p + 1, pe - p - 1);
|
|
400
386
|
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
|
|
401
387
|
}
|
|
402
388
|
break;
|
|
403
|
-
// line
|
|
389
|
+
// line 390 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
|
|
404
390
|
}
|
|
405
391
|
}
|
|
406
392
|
}
|
|
@@ -420,19 +406,19 @@ case 5:
|
|
|
420
406
|
break; }
|
|
421
407
|
}
|
|
422
408
|
|
|
423
|
-
// line
|
|
409
|
+
// line 100 "ext/puma_http11/http11_parser.java.rl"
|
|
424
410
|
|
|
425
|
-
|
|
426
|
-
|
|
411
|
+
this.cs = cs;
|
|
412
|
+
this.nread += (p - off);
|
|
427
413
|
|
|
428
414
|
assert p <= pe : "buffer overflow after parsing execute";
|
|
429
|
-
assert
|
|
430
|
-
assert
|
|
431
|
-
assert
|
|
432
|
-
assert
|
|
433
|
-
assert
|
|
415
|
+
assert this.nread <= len : "nread longer than length";
|
|
416
|
+
assert this.body_start <= len : "body starts after buffer end";
|
|
417
|
+
assert this.mark < len : "mark is after buffer end";
|
|
418
|
+
assert this.field_len <= len : "field has length longer than whole buffer";
|
|
419
|
+
assert this.field_start < len : "field starts after buffer end";
|
|
434
420
|
|
|
435
|
-
return
|
|
421
|
+
return this.nread;
|
|
436
422
|
}
|
|
437
423
|
|
|
438
424
|
public int finish() {
|
|
@@ -446,10 +432,10 @@ case 5:
|
|
|
446
432
|
}
|
|
447
433
|
|
|
448
434
|
public boolean has_error() {
|
|
449
|
-
return
|
|
435
|
+
return this.cs == puma_parser_error;
|
|
450
436
|
}
|
|
451
437
|
|
|
452
438
|
public boolean is_finished() {
|
|
453
|
-
return
|
|
439
|
+
return this.cs == puma_parser_first_final;
|
|
454
440
|
}
|
|
455
441
|
}
|