unicorn 5.5.2 → 6.1.0

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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/.manifest +3 -2
  3. data/.olddoc.yml +15 -7
  4. data/CONTRIBUTORS +6 -2
  5. data/Documentation/unicorn.1 +4 -4
  6. data/Documentation/unicorn_rails.1 +4 -4
  7. data/FAQ +1 -1
  8. data/GIT-VERSION-FILE +1 -1
  9. data/GIT-VERSION-GEN +1 -1
  10. data/GNUmakefile +105 -60
  11. data/HACKING +2 -9
  12. data/ISSUES +24 -23
  13. data/KNOWN_ISSUES +2 -2
  14. data/LATEST +23 -22
  15. data/Links +5 -5
  16. data/NEWS +132 -0
  17. data/README +15 -9
  18. data/SIGNALS +1 -1
  19. data/Sandbox +3 -3
  20. data/archive/slrnpull.conf +1 -1
  21. data/examples/big_app_gc.rb +1 -1
  22. data/examples/logrotate.conf +2 -2
  23. data/examples/nginx.conf +1 -1
  24. data/examples/unicorn.conf.minimal.rb +2 -2
  25. data/examples/unicorn.conf.rb +2 -2
  26. data/ext/unicorn_http/c_util.h +5 -13
  27. data/ext/unicorn_http/common_field_optimization.h +0 -1
  28. data/ext/unicorn_http/epollexclusive.h +124 -0
  29. data/ext/unicorn_http/ext_help.h +0 -24
  30. data/ext/unicorn_http/extconf.rb +2 -6
  31. data/ext/unicorn_http/global_variables.h +1 -1
  32. data/ext/unicorn_http/httpdate.c +1 -0
  33. data/ext/unicorn_http/unicorn_http.c +258 -228
  34. data/ext/unicorn_http/unicorn_http.rl +48 -18
  35. data/lib/unicorn/configurator.rb +13 -3
  36. data/lib/unicorn/http_request.rb +11 -1
  37. data/lib/unicorn/http_server.rb +56 -29
  38. data/lib/unicorn/oob_gc.rb +5 -5
  39. data/lib/unicorn/select_waiter.rb +6 -0
  40. data/lib/unicorn/version.rb +1 -1
  41. data/lib/unicorn.rb +1 -3
  42. data/man/man1/unicorn.1 +4 -4
  43. data/man/man1/unicorn_rails.1 +4 -4
  44. data/t/GNUmakefile +3 -72
  45. data/t/README +1 -1
  46. data/t/test-lib.sh +2 -1
  47. data/test/exec/test_exec.rb +14 -12
  48. data/test/test_helper.rb +38 -30
  49. data/test/unit/test_ccc.rb +4 -3
  50. data/test/unit/test_http_parser_ng.rb +81 -0
  51. data/test/unit/test_server.rb +81 -7
  52. data/test/unit/test_signals.rb +6 -6
  53. data/test/unit/test_socket_helper.rb +1 -1
  54. data/test/unit/test_upload.rb +9 -14
  55. data/test/unit/test_util.rb +4 -3
  56. data/test/unit/test_waiter.rb +34 -0
  57. data/unicorn.gemspec +8 -7
  58. metadata +11 -8
  59. data/t/hijack.ru +0 -55
  60. data/t/t0200-rack-hijack.sh +0 -51
data/unicorn.gemspec CHANGED
@@ -11,24 +11,25 @@ end.compact
11
11
 
12
12
  Gem::Specification.new do |s|
13
13
  s.name = %q{unicorn}
14
- s.version = (ENV['VERSION'] || '5.5.0').dup
14
+ s.version = (ENV['VERSION'] || '6.1.0').dup
15
15
  s.authors = ['unicorn hackers']
16
16
  s.summary = 'Rack HTTP server for fast clients and Unix'
17
17
  s.description = File.read('README').split("\n\n")[1]
18
- s.email = %q{unicorn-public@bogomips.org}
18
+ s.email = %q{unicorn-public@yhbt.net}
19
19
  s.executables = %w(unicorn unicorn_rails)
20
20
  s.extensions = %w(ext/unicorn_http/extconf.rb)
21
21
  s.extra_rdoc_files = IO.readlines('.document').map!(&:chomp!).keep_if do |f|
22
22
  File.exist?(f)
23
23
  end
24
24
  s.files = manifest
25
- s.homepage = 'https://bogomips.org/unicorn/'
25
+ s.homepage = 'https://yhbt.net/unicorn/'
26
26
  s.test_files = test_files
27
27
 
28
- # technically we need ">= 1.9.3", too, but avoid the array here since
29
- # old rubygems versions (1.8.23.2 at least) do not support multiple
30
- # version requirements here.
31
- s.required_ruby_version = '< 3.0'
28
+ # 2.0.0 is the minimum supported version. We don't specify
29
+ # a maximum version to make it easier to test pre-releases,
30
+ # but we do warn users if they install unicorn on an untested
31
+ # version in extconf.rb
32
+ s.required_ruby_version = ">= 2.0.0"
32
33
 
33
34
  # We do not have a hard dependency on rack, it's possible to load
34
35
  # things which respond to #call. HTTP status lines in responses
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unicorn
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.5.2
4
+ version: 6.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - unicorn hackers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-20 00:00:00.000000000 Z
11
+ date: 2021-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -72,7 +72,7 @@ description: |-
72
72
  advantage of features in Unix/Unix-like kernels. Slow clients should
73
73
  only be served by placing a reverse proxy capable of fully buffering
74
74
  both the the request and response in between unicorn and slow clients.
75
- email: unicorn-public@bogomips.org
75
+ email: unicorn-public@yhbt.net
76
76
  executables:
77
77
  - unicorn
78
78
  - unicorn_rails
@@ -157,6 +157,7 @@ files:
157
157
  - ext/unicorn_http/CFLAGS
158
158
  - ext/unicorn_http/c_util.h
159
159
  - ext/unicorn_http/common_field_optimization.h
160
+ - ext/unicorn_http/epollexclusive.h
160
161
  - ext/unicorn_http/ext_help.h
161
162
  - ext/unicorn_http/extconf.rb
162
163
  - ext/unicorn_http/global_variables.h
@@ -176,6 +177,7 @@ files:
176
177
  - lib/unicorn/launcher.rb
177
178
  - lib/unicorn/oob_gc.rb
178
179
  - lib/unicorn/preread_input.rb
180
+ - lib/unicorn/select_waiter.rb
179
181
  - lib/unicorn/socket_helper.rb
180
182
  - lib/unicorn/stream_input.rb
181
183
  - lib/unicorn/tee_input.rb
@@ -197,7 +199,6 @@ files:
197
199
  - t/env.ru
198
200
  - t/fails-rack-lint.ru
199
201
  - t/heartbeat-timeout.ru
200
- - t/hijack.ru
201
202
  - t/listener_names.ru
202
203
  - t/my-tap-lib.sh
203
204
  - t/oob_gc.ru
@@ -235,7 +236,6 @@ files:
235
236
  - t/t0100-rack-input-tests.sh
236
237
  - t/t0116-client_body_buffer_size.sh
237
238
  - t/t0116.ru
238
- - t/t0200-rack-hijack.sh
239
239
  - t/t0300-no-default-middleware.sh
240
240
  - t/t0301-no-default-middleware-ignored-in-config.sh
241
241
  - t/t0301.ru
@@ -268,10 +268,11 @@ files:
268
268
  - test/unit/test_tee_input.rb
269
269
  - test/unit/test_upload.rb
270
270
  - test/unit/test_util.rb
271
+ - test/unit/test_waiter.rb
271
272
  - unicorn.gemspec
272
273
  - unicorn_1
273
274
  - unicorn_rails_1
274
- homepage: https://bogomips.org/unicorn/
275
+ homepage: https://yhbt.net/unicorn/
275
276
  licenses:
276
277
  - GPL-2.0+
277
278
  - Ruby-1.8
@@ -282,9 +283,9 @@ require_paths:
282
283
  - lib
283
284
  required_ruby_version: !ruby/object:Gem::Requirement
284
285
  requirements:
285
- - - "<"
286
+ - - ">="
286
287
  - !ruby/object:Gem::Version
287
- version: '3.0'
288
+ version: 2.0.0
288
289
  required_rubygems_version: !ruby/object:Gem::Requirement
289
290
  requirements:
290
291
  - - ">="
@@ -301,4 +302,6 @@ test_files:
301
302
  - test/unit/test_http_parser_ng.rb
302
303
  - test/unit/test_request.rb
303
304
  - test/unit/test_server.rb
305
+ - test/unit/test_upload.rb
304
306
  - test/unit/test_util.rb
307
+ - test/unit/test_waiter.rb
data/t/hijack.ru DELETED
@@ -1,55 +0,0 @@
1
- use Rack::Lint
2
- use Rack::ContentLength
3
- use Rack::ContentType, "text/plain"
4
- class DieIfUsed
5
- @@n = 0
6
- def each
7
- abort "body.each called after response hijack\n"
8
- end
9
-
10
- def close
11
- warn "closed DieIfUsed #{@@n += 1}\n"
12
- end
13
- end
14
-
15
- envs = []
16
-
17
- run lambda { |env|
18
- case env["PATH_INFO"]
19
- when "/hijack_req"
20
- if env["rack.hijack?"]
21
- io = env["rack.hijack"].call
22
- envs << env
23
- if io.respond_to?(:read_nonblock) &&
24
- env["rack.hijack_io"].respond_to?(:read_nonblock)
25
-
26
- # exercise both, since we Rack::Lint may use different objects
27
- env["rack.hijack_io"].write("HTTP/1.0 200 OK\r\n\r\n")
28
- io.write("request.hijacked")
29
- io.close
30
- return [ 500, {}, DieIfUsed.new ]
31
- end
32
- end
33
- [ 500, {}, [ "hijack BAD\n" ] ]
34
- when "/hijack_res"
35
- r = "response.hijacked"
36
- [ 200,
37
- {
38
- "Content-Length" => r.bytesize.to_s,
39
- "rack.hijack" => proc do |io|
40
- envs << env
41
- io.write(r)
42
- io.close
43
- end
44
- },
45
- DieIfUsed.new
46
- ]
47
- when "/normal_env_id"
48
- b = "#{env.object_id}\n"
49
- h = {
50
- 'Content-Type' => 'text/plain',
51
- 'Content-Length' => b.bytesize.to_s,
52
- }
53
- [ 200, h, [ b ] ]
54
- end
55
- }
@@ -1,51 +0,0 @@
1
- #!/bin/sh
2
- . ./test-lib.sh
3
- t_plan 9 "rack.hijack tests (Rack 1.5+ (Rack::VERSION >= [ 1,2]))"
4
-
5
- t_begin "setup and start" && {
6
- unicorn_setup
7
- unicorn -D -c $unicorn_config hijack.ru
8
- unicorn_wait_start
9
- }
10
-
11
- t_begin "normal env reused between requests" && {
12
- env_a="$(curl -sSf http://$listen/normal_env_id)"
13
- b="$(curl -sSf http://$listen/normal_env_id)"
14
- test x"$env_a" = x"$b"
15
- }
16
-
17
- t_begin "check request hijack" && {
18
- test "xrequest.hijacked" = x"$(curl -sSfv http://$listen/hijack_req)"
19
- }
20
-
21
- t_begin "env changed after request hijack" && {
22
- env_b="$(curl -sSf http://$listen/normal_env_id)"
23
- test x"$env_a" != x"$env_b"
24
- }
25
-
26
- t_begin "check response hijack" && {
27
- test "xresponse.hijacked" = x"$(curl -sSfv http://$listen/hijack_res)"
28
- }
29
-
30
- t_begin "env changed after response hijack" && {
31
- env_c="$(curl -sSf http://$listen/normal_env_id)"
32
- test x"$env_b" != x"$env_c"
33
- }
34
-
35
- t_begin "env continues to be reused between requests" && {
36
- b="$(curl -sSf http://$listen/normal_env_id)"
37
- test x"$env_c" = x"$b"
38
- }
39
-
40
- t_begin "killing succeeds after hijack" && {
41
- kill $unicorn_pid
42
- }
43
-
44
- t_begin "check stderr for hijacked body close" && {
45
- check_stderr
46
- grep 'closed DieIfUsed 1\>' $r_err
47
- grep 'closed DieIfUsed 2\>' $r_err
48
- ! grep 'closed DieIfUsed 3\>' $r_err
49
- }
50
-
51
- t_done