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.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +448 -8
  3. data/README.md +110 -51
  4. data/docs/5.0-Upgrade.md +98 -0
  5. data/docs/6.0-Upgrade.md +56 -0
  6. data/docs/7.0-Upgrade.md +52 -0
  7. data/docs/8.0-Upgrade.md +100 -0
  8. data/docs/deployment.md +58 -23
  9. data/docs/fork_worker.md +11 -1
  10. data/docs/grpc.md +62 -0
  11. data/docs/images/favicon.svg +1 -0
  12. data/docs/images/running-puma.svg +1 -0
  13. data/docs/images/standard-logo.svg +1 -0
  14. data/docs/java_options.md +54 -0
  15. data/docs/jungle/README.md +1 -1
  16. data/docs/kubernetes.md +11 -16
  17. data/docs/plugins.md +6 -2
  18. data/docs/restart.md +2 -2
  19. data/docs/signals.md +21 -21
  20. data/docs/stats.md +11 -5
  21. data/docs/systemd.md +14 -5
  22. data/ext/puma_http11/extconf.rb +20 -32
  23. data/ext/puma_http11/http11_parser.java.rl +51 -65
  24. data/ext/puma_http11/mini_ssl.c +29 -9
  25. data/ext/puma_http11/org/jruby/puma/EnvKey.java +241 -0
  26. data/ext/puma_http11/org/jruby/puma/Http11.java +194 -101
  27. data/ext/puma_http11/org/jruby/puma/Http11Parser.java +71 -85
  28. data/ext/puma_http11/puma_http11.c +125 -118
  29. data/lib/puma/app/status.rb +11 -3
  30. data/lib/puma/binder.rb +22 -12
  31. data/lib/puma/cli.rb +11 -9
  32. data/lib/puma/client.rb +233 -136
  33. data/lib/puma/client_env.rb +171 -0
  34. data/lib/puma/cluster/worker.rb +24 -21
  35. data/lib/puma/cluster/worker_handle.rb +38 -8
  36. data/lib/puma/cluster.rb +74 -48
  37. data/lib/puma/cluster_accept_loop_delay.rb +91 -0
  38. data/lib/puma/commonlogger.rb +3 -3
  39. data/lib/puma/configuration.rb +197 -64
  40. data/lib/puma/const.rb +23 -12
  41. data/lib/puma/control_cli.rb +11 -7
  42. data/lib/puma/detect.rb +13 -0
  43. data/lib/puma/dsl.rb +483 -127
  44. data/lib/puma/error_logger.rb +7 -5
  45. data/lib/puma/events.rb +25 -10
  46. data/lib/puma/io_buffer.rb +8 -4
  47. data/lib/puma/jruby_restart.rb +0 -16
  48. data/lib/puma/launcher/bundle_pruner.rb +3 -5
  49. data/lib/puma/launcher.rb +76 -59
  50. data/lib/puma/log_writer.rb +17 -11
  51. data/lib/puma/minissl/context_builder.rb +1 -0
  52. data/lib/puma/minissl.rb +1 -1
  53. data/lib/puma/null_io.rb +26 -0
  54. data/lib/puma/plugin/systemd.rb +3 -3
  55. data/lib/puma/rack/urlmap.rb +1 -1
  56. data/lib/puma/reactor.rb +19 -13
  57. data/lib/puma/{request.rb → response.rb} +57 -209
  58. data/lib/puma/runner.rb +15 -17
  59. data/lib/puma/sd_notify.rb +1 -4
  60. data/lib/puma/server.rb +200 -104
  61. data/lib/puma/server_plugin_control.rb +32 -0
  62. data/lib/puma/single.rb +7 -4
  63. data/lib/puma/state_file.rb +3 -2
  64. data/lib/puma/thread_pool.rb +179 -96
  65. data/lib/puma/util.rb +0 -7
  66. data/lib/puma.rb +10 -0
  67. data/lib/rack/handler/puma.rb +11 -8
  68. data/tools/Dockerfile +15 -5
  69. metadata +26 -16
  70. 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 58 "ext/puma_http11/http11_parser.java.rl"
15
+ // line 59 "ext/puma_http11/http11_parser.java.rl"
15
16
 
16
17
 
17
18
  /** Data **/
18
19
 
19
- // line 20 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
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 62 "ext/puma_http11/http11_parser.java.rl"
189
+ // line 63 "ext/puma_http11/http11_parser.java.rl"
189
190
 
190
- public static interface ElementCB {
191
- public void call(Ruby runtime, RubyHash data, ByteList buffer, int at, int length);
192
- }
193
-
194
- public static interface FieldCB {
195
- public void call(Ruby runtime, RubyHash data, ByteList buffer, int field, int flen, int value, int vlen);
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
- RubyHash data;
209
- ByteList buffer;
199
+ RubyHash data;
200
+ byte[] buffer;
210
201
 
211
- public void init() {
212
- cs = 0;
202
+ public void init() {
213
203
 
214
-
215
- // line 216 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
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 88 "ext/puma_http11/http11_parser.java.rl"
210
+ // line 78 "ext/puma_http11/http11_parser.java.rl"
221
211
 
222
- body_start = 0;
223
- content_len = 0;
224
- mark = 0;
225
- nread = 0;
226
- field_len = 0;
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 = parser.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
- // get a copy of the bytes, since it may not start at 0
242
- // FIXME: figure out how to just use the bytes in-place
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 248 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
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 15 "ext/puma_http11/http11_parser.java.rl"
329
- {parser.mark = p; }
314
+ // line 16 "ext/puma_http11/http11_parser.java.rl"
315
+ {this.mark = p; }
330
316
  break;
331
317
  case 1:
332
- // line 17 "ext/puma_http11/http11_parser.java.rl"
333
- { parser.field_start = p; }
318
+ // line 18 "ext/puma_http11/http11_parser.java.rl"
319
+ { this.field_start = p; }
334
320
  break;
335
321
  case 2:
336
- // line 18 "ext/puma_http11/http11_parser.java.rl"
337
- { /* FIXME stub */ }
322
+ // line 19 "ext/puma_http11/http11_parser.java.rl"
323
+ { /* done lazily as needed */ }
338
324
  break;
339
325
  case 3:
340
- // line 19 "ext/puma_http11/http11_parser.java.rl"
326
+ // line 20 "ext/puma_http11/http11_parser.java.rl"
341
327
  {
342
- parser.field_len = p-parser.field_start;
328
+ this.field_len = p-this.field_start;
343
329
  }
344
330
  break;
345
331
  case 4:
346
- // line 23 "ext/puma_http11/http11_parser.java.rl"
347
- { parser.mark = p; }
332
+ // line 24 "ext/puma_http11/http11_parser.java.rl"
333
+ { this.mark = p; }
348
334
  break;
349
335
  case 5:
350
- // line 24 "ext/puma_http11/http11_parser.java.rl"
336
+ // line 25 "ext/puma_http11/http11_parser.java.rl"
351
337
  {
352
- Http11.http_field(runtime, parser.data, parser.buffer, parser.field_start, parser.field_len, parser.mark, p-parser.mark);
338
+ Http11.http_field(runtime, envStrings, this, p-this.mark);
353
339
  }
354
340
  break;
355
341
  case 6:
356
- // line 27 "ext/puma_http11/http11_parser.java.rl"
342
+ // line 28 "ext/puma_http11/http11_parser.java.rl"
357
343
  {
358
- Http11.request_method(runtime, parser.data, parser.buffer, parser.mark, p-parser.mark);
344
+ Http11.request_method(runtime, envStrings, this, p-this.mark);
359
345
  }
360
346
  break;
361
347
  case 7:
362
- // line 30 "ext/puma_http11/http11_parser.java.rl"
348
+ // line 31 "ext/puma_http11/http11_parser.java.rl"
363
349
  {
364
- Http11.request_uri(runtime, parser.data, parser.buffer, parser.mark, p-parser.mark);
350
+ Http11.request_uri(runtime, envStrings, this, p-this.mark);
365
351
  }
366
352
  break;
367
353
  case 8:
368
- // line 33 "ext/puma_http11/http11_parser.java.rl"
354
+ // line 34 "ext/puma_http11/http11_parser.java.rl"
369
355
  {
370
- Http11.fragment(runtime, parser.data, parser.buffer, parser.mark, p-parser.mark);
356
+ Http11.fragment(runtime, envStrings, this, p-this.mark);
371
357
  }
372
358
  break;
373
359
  case 9:
374
- // line 37 "ext/puma_http11/http11_parser.java.rl"
375
- {parser.query_start = p; }
360
+ // line 38 "ext/puma_http11/http11_parser.java.rl"
361
+ {this.query_start = p; }
376
362
  break;
377
363
  case 10:
378
- // line 38 "ext/puma_http11/http11_parser.java.rl"
364
+ // line 39 "ext/puma_http11/http11_parser.java.rl"
379
365
  {
380
- Http11.query_string(runtime, parser.data, parser.buffer, parser.query_start, p-parser.query_start);
366
+ Http11.query_string(runtime, envStrings, this, p-this.query_start);
381
367
  }
382
368
  break;
383
369
  case 11:
384
- // line 42 "ext/puma_http11/http11_parser.java.rl"
370
+ // line 43 "ext/puma_http11/http11_parser.java.rl"
385
371
  {
386
- Http11.server_protocol(runtime, parser.data, parser.buffer, parser.mark, p-parser.mark);
372
+ Http11.server_protocol(runtime, envStrings, this, p-this.mark);
387
373
  }
388
374
  break;
389
375
  case 12:
390
- // line 46 "ext/puma_http11/http11_parser.java.rl"
376
+ // line 47 "ext/puma_http11/http11_parser.java.rl"
391
377
  {
392
- Http11.request_path(runtime, parser.data, parser.buffer, parser.mark, p-parser.mark);
378
+ Http11.request_path(runtime, envStrings, this, p-this.mark);
393
379
  }
394
380
  break;
395
381
  case 13:
396
- // line 50 "ext/puma_http11/http11_parser.java.rl"
382
+ // line 51 "ext/puma_http11/http11_parser.java.rl"
397
383
  {
398
- parser.body_start = p + 1;
399
- http.header_done(runtime, parser.data, parser.buffer, p + 1, pe - p - 1);
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 404 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
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 114 "ext/puma_http11/http11_parser.java.rl"
409
+ // line 100 "ext/puma_http11/http11_parser.java.rl"
424
410
 
425
- parser.cs = cs;
426
- parser.nread += (p - off);
411
+ this.cs = cs;
412
+ this.nread += (p - off);
427
413
 
428
414
  assert p <= pe : "buffer overflow after parsing execute";
429
- assert parser.nread <= len : "nread longer than length";
430
- assert parser.body_start <= len : "body starts after buffer end";
431
- assert parser.mark < len : "mark is after buffer end";
432
- assert parser.field_len <= len : "field has length longer than whole buffer";
433
- assert parser.field_start < len : "field starts after buffer end";
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 parser.nread;
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 parser.cs == puma_parser_error;
435
+ return this.cs == puma_parser_error;
450
436
  }
451
437
 
452
438
  public boolean is_finished() {
453
- return parser.cs == puma_parser_first_final;
439
+ return this.cs == puma_parser_first_final;
454
440
  }
455
441
  }