unicorn 5.5.2 → 6.1.0

Sign up to get free protection for your applications and to get access to all the features.
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