unicorn 4.7.0 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +7 -0
  2. data/.document +0 -1
  3. data/.gitattributes +5 -0
  4. data/.gitignore +2 -2
  5. data/.manifest +14 -21
  6. data/.olddoc.yml +22 -0
  7. data/Application_Timeouts +7 -7
  8. data/DESIGN +2 -4
  9. data/Documentation/.gitignore +1 -3
  10. data/Documentation/unicorn.1 +222 -0
  11. data/Documentation/unicorn_rails.1 +207 -0
  12. data/FAQ +23 -6
  13. data/GIT-VERSION-FILE +1 -1
  14. data/GIT-VERSION-GEN +1 -1
  15. data/GNUmakefile +139 -92
  16. data/HACKING +13 -28
  17. data/ISSUES +82 -19
  18. data/KNOWN_ISSUES +18 -18
  19. data/LATEST +22 -44
  20. data/LICENSE +2 -2
  21. data/Links +24 -22
  22. data/NEWS +729 -0
  23. data/PHILOSOPHY +0 -6
  24. data/README +50 -48
  25. data/Rakefile +0 -44
  26. data/SIGNALS +12 -3
  27. data/Sandbox +11 -10
  28. data/TODO +0 -2
  29. data/TUNING +30 -9
  30. data/archive/.gitignore +3 -0
  31. data/archive/slrnpull.conf +4 -0
  32. data/bin/unicorn +4 -2
  33. data/bin/unicorn_rails +3 -3
  34. data/examples/big_app_gc.rb +1 -1
  35. data/examples/init.sh +36 -8
  36. data/examples/logrotate.conf +17 -2
  37. data/examples/nginx.conf +14 -14
  38. data/examples/unicorn.conf.minimal.rb +2 -2
  39. data/examples/unicorn.conf.rb +14 -6
  40. data/examples/unicorn.socket +11 -0
  41. data/examples/unicorn@.service +40 -0
  42. data/ext/unicorn_http/common_field_optimization.h +23 -5
  43. data/ext/unicorn_http/ext_help.h +0 -20
  44. data/ext/unicorn_http/extconf.rb +37 -1
  45. data/ext/unicorn_http/global_variables.h +1 -1
  46. data/ext/unicorn_http/httpdate.c +2 -2
  47. data/ext/unicorn_http/unicorn_http.c +940 -644
  48. data/ext/unicorn_http/unicorn_http.rl +167 -170
  49. data/ext/unicorn_http/unicorn_http_common.rl +1 -1
  50. data/lib/unicorn/configurator.rb +110 -46
  51. data/lib/unicorn/const.rb +2 -25
  52. data/lib/unicorn/http_request.rb +110 -31
  53. data/lib/unicorn/http_response.rb +17 -31
  54. data/lib/unicorn/http_server.rb +292 -199
  55. data/lib/unicorn/launcher.rb +1 -1
  56. data/lib/unicorn/oob_gc.rb +16 -6
  57. data/lib/unicorn/socket_helper.rb +58 -78
  58. data/lib/unicorn/stream_input.rb +9 -11
  59. data/lib/unicorn/tee_input.rb +16 -11
  60. data/lib/unicorn/tmpio.rb +10 -6
  61. data/lib/unicorn/util.rb +5 -4
  62. data/lib/unicorn/version.rb +1 -1
  63. data/lib/unicorn/worker.rb +99 -22
  64. data/lib/unicorn.rb +69 -42
  65. data/man/man1/unicorn.1 +124 -122
  66. data/man/man1/unicorn_rails.1 +113 -127
  67. data/t/.gitignore +0 -1
  68. data/t/GNUmakefile +3 -80
  69. data/t/README +4 -4
  70. data/t/t0002-parser-error.sh +3 -3
  71. data/t/t0011-active-unix-socket.sh +1 -1
  72. data/t/t0012-reload-empty-config.sh +2 -1
  73. data/t/t0300-no-default-middleware.sh +6 -1
  74. data/t/t0301-no-default-middleware-ignored-in-config.sh +25 -0
  75. data/t/t0301.ru +13 -0
  76. data/t/test-lib.sh +2 -2
  77. data/test/benchmark/README +14 -4
  78. data/test/benchmark/ddstream.ru +50 -0
  79. data/test/benchmark/readinput.ru +40 -0
  80. data/test/benchmark/uconnect.perl +66 -0
  81. data/test/exec/test_exec.rb +74 -20
  82. data/test/test_helper.rb +42 -33
  83. data/test/unit/test_ccc.rb +91 -0
  84. data/test/unit/test_droplet.rb +1 -1
  85. data/test/unit/test_http_parser.rb +49 -19
  86. data/test/unit/test_http_parser_ng.rb +98 -115
  87. data/test/unit/test_request.rb +11 -11
  88. data/test/unit/test_response.rb +31 -19
  89. data/test/unit/test_server.rb +89 -15
  90. data/test/unit/test_signals.rb +9 -9
  91. data/test/unit/test_socket_helper.rb +20 -14
  92. data/test/unit/test_tee_input.rb +10 -0
  93. data/test/unit/test_upload.rb +10 -15
  94. data/test/unit/test_util.rb +28 -3
  95. data/unicorn.gemspec +28 -23
  96. data/unicorn_1 +1 -0
  97. data/unicorn_rails_1 +1 -0
  98. metadata +64 -134
  99. data/.wrongdoc.yml +0 -10
  100. data/ChangeLog +0 -4694
  101. data/Documentation/GNUmakefile +0 -30
  102. data/Documentation/unicorn.1.txt +0 -178
  103. data/Documentation/unicorn_rails.1.txt +0 -175
  104. data/examples/git.ru +0 -13
  105. data/lib/unicorn/app/exec_cgi.rb +0 -154
  106. data/lib/unicorn/app/inetd.rb +0 -109
  107. data/lib/unicorn/ssl_client.rb +0 -11
  108. data/lib/unicorn/ssl_configurator.rb +0 -104
  109. data/lib/unicorn/ssl_server.rb +0 -42
  110. data/local.mk.sample +0 -59
  111. data/script/isolate_for_tests +0 -32
  112. data/t/hijack.ru +0 -42
  113. data/t/sslgen.sh +0 -71
  114. data/t/t0016-trust-x-forwarded-false.sh +0 -30
  115. data/t/t0017-trust-x-forwarded-true.sh +0 -30
  116. data/t/t0200-rack-hijack.sh +0 -27
  117. data/t/t0600-https-server-basic.sh +0 -48
  118. data/test/unit/test_http_parser_xftrust.rb +0 -38
  119. data/test/unit/test_sni_hostnames.rb +0 -47
data/NEWS CHANGED
@@ -1,3 +1,732 @@
1
+ === unicorn 5.5.0 / 2019-03-04 00:41 UTC
2
+
3
+ Mostly identical to 5.5.0.pre1, which I didn't hear any feedback
4
+ from:
5
+
6
+ https://bogomips.org/unicorn-public/20181220222842.GA27382@dcvr/
7
+
8
+ > Jeremy Evans contributed the "default_middleware" configuration option:
9
+ >
10
+ > https://bogomips.org/unicorn-public/20180913192055.GD48926@jeremyevans.local/
11
+ >
12
+ > Jeremy also contributed the ability to use separate groups for the process
13
+ > and log files:
14
+ >
15
+ > https://bogomips.org/unicorn-public/20180913192449.GE48926@jeremyevans.local/
16
+ >
17
+ > There's also a couple of uninteresting minor optimizations and
18
+ > documentation additions.
19
+
20
+ Otherwise, there's one extra change to use
21
+ rb_gc_register_mark_object which is finally a documented part of
22
+ the Ruby C-API, but has existed since the 1.9 days.
23
+
24
+ === unicorn 5.5.0.pre1 / 2018-12-20 20:11 UTC
25
+
26
+ Jeremy Evans contributed the "default_middleware" configuration option:
27
+
28
+ https://bogomips.org/unicorn-public/20180913192055.GD48926@jeremyevans.local/
29
+
30
+ Jeremy also contributed the ability to use separate groups for the process
31
+ and log files:
32
+
33
+ https://bogomips.org/unicorn-public/20180913192449.GE48926@jeremyevans.local/
34
+
35
+ There's also a couple of uninteresting minor optimizations and
36
+ documentation additions.
37
+
38
+ Eric Wong (10):
39
+ remove random seed reset atfork
40
+ use IO#wait instead of kgio_wait_readable
41
+ Merge branch '5.4-stable'
42
+ shrink pipes under Linux
43
+ socket_helper: add hint for FreeBSD users for accf_http(9)
44
+ tests: ensure -N/--no-default-middleware not supported in config.ru
45
+ doc: update more URLs to use HTTPS and avoid redirects
46
+ deduplicate strings VM-wide in Ruby 2.5+
47
+ doc/ISSUES: add links to git clone-able mail archives of our dependencies
48
+ README: minor updates and additional disclaimer
49
+
50
+ Jeremy Evans (2):
51
+ Make Worker#user support different process primary group and log file group
52
+ Support default_middleware configuration option
53
+
54
+ === unicorn 5.4.1 / 2018-07-23 17:13 UTC
55
+
56
+ This release quiets some warnings for Ruby 2.6 preview releases
57
+ and enables tests to pass under Ruby 1.9.3. Otherwise, nothing
58
+ interesting for Ruby 2.0..2.5 users. *YAWN*
59
+
60
+ Eric Wong (1):
61
+ quiet some mismatched indentation warnings
62
+
63
+ Fumiaki MATSUSHIMA (1):
64
+ Use IO#wait instead to fix test for Ruby 1.9
65
+
66
+ === unicorn 5.4.0 / 2017-12-23 23:33 UTC
67
+
68
+ Rack hijack support improves as the app code can capture and use
69
+ the Rack `env' privately without copying it (to avoid clobbering
70
+ by another client). Thanks to Sam Saffron for reporting and
71
+ testing this new feature:
72
+ https://bogomips.org/unicorn-public/CAAtdryPG3nLuyo0jxfYW1YHu1Q+ZpkLkd4KdWC8vA46B5haZxw@mail.gmail.com/T/
73
+
74
+ We also now support $DEBUG being set by the Rack app (instead of
75
+ relying on the "-d" CLI switch). Thanks to James P Robinson Jr
76
+ for reporting this bug:
77
+ https://bogomips.org/unicorn-public/D6324CB4.7BC3E%25james.robinson3@cigna.com/T/
78
+ (Coincidentally, this fix will be irrelevant for Ruby 2.5
79
+ which requires 'pp' by default)
80
+
81
+ There's a few minor test cleanups and documentation updates, too.
82
+
83
+ All commits since v5.3.1 (2017-10-03):
84
+
85
+ reduce method calls with String#start_with?
86
+ require 'pp' if $DEBUG is set by Rack app
87
+ avoid reusing env on hijack
88
+ tests: cleanup some unused variable warnings
89
+ ISSUES: add a note about Debian BTS interopability
90
+
91
+ Roughly all mailing discussions since the last release:
92
+
93
+ https://bogomips.org/unicorn-public/?q=d:20171004..20171223
94
+
95
+ === unicorn 5.3.1 / 2017-10-03 19:03 UTC
96
+
97
+ This release fixes an occasional GC problem introduced in v5.3.0
98
+ to reduce global variable overhead (commit 979ebcf91705709b)
99
+
100
+ Thanks to Xuanzhong Wei for the patch which lead to this release:
101
+
102
+ https://bogomips.org/unicorn-public/20171003182054.76392-1-azrlew@gmail.com/T/#u
103
+ https://bogomips.org/unicorn-public/20171003145718.30404-1-azrlew@gmail.com/T/#u
104
+
105
+ Xuanzhong Wei (1):
106
+ fix GC issue on rb_global_variable array
107
+
108
+ === unicorn 5.3.0 / 2017-04-01 08:03 UTC
109
+
110
+ A couple of portability fixes from Dylan Thacker-Smith and
111
+ Jeremy Evans since 5.3.0.pre1 over a week ago, but this looks
112
+ ready for a stable release, today.
113
+
114
+ When I started this over 8 years ago, I wondered if this would
115
+ just end up being an April Fools' joke. Guess not. I guess I
116
+ somehow tricked people into using a terribly marketed web server
117
+ that cannot talk directly to untrusted clients :x Anyways,
118
+ unicorn won't be able to handle slow clients 8 years from now,
119
+ either, or 80 years from now. And I vow never to learn to use
120
+ new-fangled things like epoll, kqueue, or threads :P
121
+
122
+ Anyways, this is a largish release with several new features,
123
+ and no backwards incompatibilities.
124
+
125
+ Simon Eskildsen contributed heavily using TCP_INFO under Linux
126
+ to implement the (now 5 year old) check_client_connection feature:
127
+
128
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-check_client_connection
129
+ https://bogomips.org/unicorn-public/?q=s:check_client_connection&d:..20170401&x=t
130
+
131
+ This also led to FreeBSD and OpenBSD portability improvements in
132
+ one of our dependencies, raindrops:
133
+
134
+ https://bogomips.org/raindrops-public/20170323024829.GA5190@dcvr/T/#u
135
+
136
+ Jeremy Evans contributed several new features. First he
137
+ implemented after_worker_exit to aid debugging:
138
+
139
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-after_worker_exit
140
+ https://bogomips.org/unicorn-public/?q=s:after_worker_exit&d:..20170401&x=t#t
141
+
142
+ And then security-related features to isolate workers. Workers
143
+ may now chroot to drop access to the master filesystem, and the
144
+ new after_worker_ready configuration hook now exists to aid with
145
+ chroot support in workers:
146
+
147
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-after_worker_ready
148
+ https://bogomips.org/unicorn/Unicorn/Worker.html#method-i-user
149
+ https://bogomips.org/unicorn-public/?q=s:after_worker_ready&d:..20170401&x=t#t
150
+ https://bogomips.org/unicorn-public/?q=s:chroot&d:..20170401&x=t#t
151
+
152
+ Additionally, workers may run in a completely different VM space
153
+ (nullifying preload_app and any CoW savings) with the new
154
+ worker_exec option:
155
+
156
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-worker_exec
157
+ https://bogomips.org/unicorn-public/?q=s:worker_exec&d:..20170401&x=t#t
158
+
159
+ There are also several improvements to FreeBSD and OpenBSD
160
+ support with the addition of these features.
161
+
162
+ shortlog of changes since v5.2.0 (2016-10-31):
163
+
164
+ Dylan Thacker-Smith (1):
165
+ Check for Socket::TCP_INFO constant before trying to get TCP_INFO
166
+
167
+ Eric Wong (30):
168
+ drop rb_str_set_len compatibility replacement
169
+ TUNING: document THP caveat for Linux users
170
+ tee_input: simplify condition for IO#write
171
+ remove response_start_sent
172
+ http_request: freeze constant strings passed IO#write
173
+ Revert "remove response_start_sent"
174
+ t/t0012-reload-empty-config.sh: access ivars directly if needed
175
+ t0011-active-unix-socket.sh: fix race condition in test
176
+ new test for check_client_connection
177
+ revert signature change to HttpServer#process_client
178
+ support "struct tcp_info" on non-Linux and Ruby 2.2+
179
+ unicorn_http: reduce rb_global_variable calls
180
+ oob_gc: rely on opt_aref_with optimization on Ruby 2.2+
181
+ http_request: reduce insn size for check_client_connection
182
+ freebsd: avoid EINVAL when setting accept filter
183
+ test-lib: expr(1) portability fix
184
+ tests: keep disabled tests defined
185
+ test_exec: SO_KEEPALIVE value only needs to be true
186
+ doc: fix links to raindrops project
187
+ http_request: support proposed Raindrops::TCP states on non-Linux
188
+ ISSUES: expand on mail archive info + subscription disclaimer
189
+ test_ccc: use a pipe to synchronize test
190
+ doc: remove private email support address
191
+ input: update documentation and hide internals.
192
+ http_server: initialize @pid ivar
193
+ gemspec: remove olddoc from build dependency
194
+ doc: add version annotations for new features
195
+ unicorn 5.3.0.pre1
196
+ doc: note after_worker_exit is also 5.3.0+
197
+ test_exec: SO_KEEPALIVE value only needs to be true (take #2)
198
+
199
+ Jeremy Evans (7):
200
+ Add after_worker_exit configuration option
201
+ Fix code example in after_worker_exit documentation
202
+ Add support for chroot to Worker#user
203
+ Add after_worker_ready configuration option
204
+ Add worker_exec configuration option
205
+ Don't pass a block for fork when forking workers
206
+ Check for SocketError on first ccc attempt
207
+
208
+ Simon Eskildsen (1):
209
+ check_client_connection: use tcp state on linux
210
+
211
+ === unicorn 5.3.0.pre1 / 2017-03-24 00:25 UTC
212
+
213
+ A largish release with several new features.
214
+
215
+ Simon Eskildsen contributed heavily using TCP_INFO under Linux
216
+ to implement the (now 5 year old) check_client_connection feature:
217
+
218
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-check_client_connection
219
+ https://bogomips.org/unicorn-public/?q=s:check_client_connection&d:..20170324&x=t
220
+
221
+ This also led to FreeBSD and OpenBSD portability improvements in
222
+ one of our dependencies, raindrops:
223
+
224
+ https://bogomips.org/raindrops-public/20170323024829.GA5190@dcvr/T/#u
225
+
226
+ Jeremy Evans contributed several new features. First he
227
+ implemented after_worker_exit to aid debugging:
228
+
229
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-after_worker_exit
230
+ https://bogomips.org/unicorn-public/?q=s:after_worker_exit&d:..20170324&x=t#t
231
+
232
+ And then security-related features to isolate workers. Workers
233
+ may now chroot to drop access to the master filesystem, and the
234
+ new after_worker_ready configuration hook now exists to aid with
235
+ chroot support in workers:
236
+
237
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-after_worker_ready
238
+ https://bogomips.org/unicorn/Unicorn/Worker.html#method-i-user
239
+ https://bogomips.org/unicorn-public/?q=s:after_worker_ready&d:..20170324&x=t#t
240
+ https://bogomips.org/unicorn-public/?q=s:chroot&d:..20170324&x=t#t
241
+
242
+ Additionally, workers may run in a completely different VM space
243
+ (nullifying preload_app and any CoW savings) with the new
244
+ worker_exec option:
245
+
246
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-worker_exec
247
+ https://bogomips.org/unicorn-public/?q=s:worker_exec&d:..20170324&x=t#t
248
+
249
+ There are also several improvements to FreeBSD and OpenBSD
250
+ support with the addition of these features.
251
+
252
+ 34 changes since 5.2.0 (2016-10-31):
253
+
254
+ Eric Wong (27):
255
+ drop rb_str_set_len compatibility replacement
256
+ TUNING: document THP caveat for Linux users
257
+ tee_input: simplify condition for IO#write
258
+ remove response_start_sent
259
+ http_request: freeze constant strings passed IO#write
260
+ Revert "remove response_start_sent"
261
+ t/t0012-reload-empty-config.sh: access ivars directly if needed
262
+ t0011-active-unix-socket.sh: fix race condition in test
263
+ new test for check_client_connection
264
+ revert signature change to HttpServer#process_client
265
+ support "struct tcp_info" on non-Linux and Ruby 2.2+
266
+ unicorn_http: reduce rb_global_variable calls
267
+ oob_gc: rely on opt_aref_with optimization on Ruby 2.2+
268
+ http_request: reduce insn size for check_client_connection
269
+ freebsd: avoid EINVAL when setting accept filter
270
+ test-lib: expr(1) portability fix
271
+ tests: keep disabled tests defined
272
+ test_exec: SO_KEEPALIVE value only needs to be true
273
+ doc: fix links to raindrops project
274
+ http_request: support proposed Raindrops::TCP states on non-Linux
275
+ ISSUES: expand on mail archive info + subscription disclaimer
276
+ test_ccc: use a pipe to synchronize test
277
+ doc: remove private email support address
278
+ input: update documentation and hide internals.
279
+ http_server: initialize @pid ivar
280
+ gemspec: remove olddoc from build dependency
281
+ doc: add version annotations for new features
282
+
283
+ Jeremy Evans (6):
284
+ Add after_worker_exit configuration option
285
+ Fix code example in after_worker_exit documentation
286
+ Add support for chroot to Worker#user
287
+ Add after_worker_ready configuration option
288
+ Add worker_exec configuration option
289
+ Don't pass a block for fork when forking workers
290
+
291
+ Simon Eskildsen (1):
292
+ check_client_connection: use tcp state on linux
293
+
294
+ === unicorn 5.2.0 / 2016-10-31 20:00 UTC
295
+
296
+ Most notably, this release allows us to support requests with
297
+ lines delimited by LF-only, as opposed to the standard CRLF
298
+ pair and allowed by RFC 2616 sec 19.3.
299
+
300
+ Thanks to Mishael A Sibiryakov for the explanation and change:
301
+
302
+ https://bogomips.org/unicorn-public/1476954332.1736.156.camel@junki.org/
303
+
304
+ Thanks to Let's Encrypt, the website also moves to HTTPS
305
+ <https://bogomips.org/unicorn/> to improve reader privacy. The
306
+ "unicorn.bogomips.org" subdomain will be retired soon to reduce
307
+ subjectAltName bloat and speed up certificate renewals.
308
+
309
+ There's also the usual round of documentation and example
310
+ updates, too.
311
+
312
+ Eric Wong (7):
313
+ examples/init.sh: update to reduce upgrade raciness
314
+ doc: systemd should only kill master in example
315
+ examples/logrotate.conf: update example for systemd
316
+ doc: update gmane URLs to point to our own archives
317
+ relocate website to https://bogomips.org/unicorn/
318
+ TODO: remove Rack 2.x item
319
+ build: "install-gem" target avoids network
320
+
321
+ Mishael A Sibiryakov (1):
322
+ Add some tolerance (RFC2616 sec. 19.3)
323
+
324
+ === unicorn 5.1.0 - rack is optional, again / 2016-04-01 00:35 UTC
325
+
326
+ Note: no code changes since 5.1.0.pre1 from January.^WNo, wait,
327
+ last minute performance improvement added today. See below.
328
+
329
+ The big change is rack is not required (but still recommended).
330
+ Applications are expected to depend on rack on their own so they can
331
+ specify the version of rack they prefer without unicorn pulling
332
+ in a newer, potentially incompatible version.
333
+
334
+ unicorn will always attempt to work with multiple versions of rack
335
+ as practical.
336
+
337
+ The HTTP parser also switched to using the TypedData C-API for
338
+ extra type safety and memory usage accounting support in the
339
+ 'objspace' extension.
340
+
341
+ Thanks to Adam Duke to bringing the rack change to our attention
342
+ and Aaron Patterson for helping with the matter.
343
+
344
+ Last minute change: we now support the new leftpad() syscall under
345
+ Linux for major performance and security improvement:
346
+
347
+ http://mid.gmane.org/1459463613-32473-1-git-send-email-richard@nod.at
348
+
349
+ 8^H9 changes since 5.0.1:
350
+
351
+ http: TypedData C-API conversion
352
+ various documentation updates
353
+ doc: bump olddoc to ~> 1.2 for extra NNTP URL
354
+ rack is optional at runtime, required for dev
355
+ doc update for ClientShutdown exceptions class
356
+ unicorn 5.1.0.pre1 - rack is optional, again
357
+ doc: reference --keep-file-descriptors for "bundle exec"
358
+ doc: further trimming to reduce noise
359
+ use leftpad Linux syscall for speed!
360
+
361
+ === unicorn 5.1.0.pre1 - rack is optional, again / 2016-01-27 23:08 UTC
362
+
363
+ The big change is rack is not required (but still recommended).
364
+ Applications are expected to depend on rack on their own so they can
365
+ specify the version of rack they prefer without unicorn pulling
366
+ in a newer, potentially incompatible version.
367
+
368
+ unicorn will always attempt to work with multiple versions of rack
369
+ as practical.
370
+
371
+ The HTTP parser also switched to using the TypedData C-API for
372
+ extra type safety and memory usage accounting support in the
373
+ 'objspace' extension.
374
+
375
+ Thanks to Adam Duke to bringing the rack change to our attention
376
+ and Aaron Patterson for helping with the matter.
377
+
378
+ There might be more documentation-related changes before 5.1.0
379
+ final. I am considering dropping pandoc from manpage generation
380
+ and relying on pod2man (from Perl) because it has a wider install
381
+ base.
382
+
383
+ 5 changes since v5.0.1:
384
+
385
+ http: TypedData C-API conversion
386
+ various documentation updates
387
+ doc: bump olddoc to ~> 1.2 for extra NNTP URL
388
+ rack is optional at runtime, required for dev
389
+ doc update for ClientShutdown exceptions class
390
+
391
+ === unicorn 5.0.1 - continuing to violate Rack SPEC / 2015-11-17 22:44 UTC
392
+
393
+ Once again, we allow nil values in response headers. We've had
394
+ this bug since March 2009, and thus cannot expect existing
395
+ applications and middlewares running unicorn to fix this.
396
+
397
+ Unfortunately, supporting this bug contributes to application
398
+ server lock-in, but at least we'll document it as such.
399
+
400
+ Thanks to Owen Ou <o@heroku.com> for reporting this regression:
401
+
402
+ http://bogomips.org/unicorn-public/CAO47=rJa=zRcLn_Xm4v2cHPr6c0UswaFC_omYFEH+baSxHOWKQ@mail.gmail.com/
403
+
404
+ Additionally, systemd examples are now in the examples/ directory
405
+ based on a post by Christos Trochalakis <yatiohi@ideopolis.gr>:
406
+
407
+ http://bogomips.org/unicorn-public/20150708130821.GA1361@luke.ws.skroutz.gr/
408
+
409
+ === unicorn 5.0.0 - most boring major release. EVER. / 2015-11-01 08:48 UTC
410
+
411
+ An evolutionary dead-end since its announcement[1] nearly six years
412
+ ago, this old-fashioned preforker has had enough bugs and missteps
413
+ that it's managed to hit version 5!
414
+
415
+ I wish I could say unicorn 5 is leaps and bounds better than 4, but
416
+ it is not. This major version change allows us to drop some cruft
417
+ and unused features which accumulated over the years, resulting in
418
+ several kilobytes of memory saved[2]!
419
+
420
+ Compatibility:
421
+
422
+ * The horrible, proprietary (:P) "Status:" response header is
423
+ finally gone, saving at least 16 precious bytes in every HTTP
424
+ response. This should make it easier to write custom HTTP clients
425
+ which are compatible across all HTTP servers. It will hopefully
426
+ make migrating between different Rack servers easier for new
427
+ projects.
428
+
429
+ * Ruby 1.8 support removed. Ruby 1.9.3 is currently the earliest
430
+ supported version. However, expect minor, likely-unnoticeable
431
+ performance regressions if you use Ruby 2.1 or earlier. Going
432
+ forward, unicorn will favor the latest version (currently 2.2) of
433
+ the mainline Ruby implementation, potentially sacrificing
434
+ performance on older Rubies.
435
+
436
+ * Some internal, undocumented features and APIs used by
437
+ derivative servers are gone; removing bloat and slightly lowering
438
+ memory use. We have never and will never endorse the use of any
439
+ applications or middleware with a dependency on unicorn,
440
+ applications should be written for Rack instead.
441
+ Note: Rainbows! 5.0 will be released next week or so to be
442
+ compatible with unicorn 5.x
443
+
444
+ New features:
445
+
446
+ * sd_listen_fds(3) emulation added for systemd compatibility.
447
+ You may now stop using PID files and other process monitoring
448
+ software when using systemd.
449
+
450
+ * Newly-set TCP socket options are now applied to inherited sockets.
451
+
452
+ * Dynamic changes in the application to Rack::Utils::HTTP_STATUS
453
+ hash is now supported; allowing users to set custom status lines
454
+ in Rack to be reflected in unicorn. This feature causes a minor
455
+ performance regression, but is made up for Ruby 2.2 users with
456
+ other optimizations.
457
+
458
+ * The monotonic clock is used under Ruby 2.1+, making the
459
+ timeout feature immune to system clock changes.
460
+
461
+ As unicorn may be used anonymously without registration, the
462
+ project is committed to supporting anonymous and pseudonymous
463
+ help requests, contributions and feedback via plain-text mail to:
464
+
465
+ unicorn-public@bogomips.org
466
+
467
+ The mail submission port (587) is open to those behind firewalls
468
+ and allows access via Tor and anonymous remailers.
469
+ Archives are accessible via: http://bogomips.org/unicorn-public/
470
+ and mirrored to various other places, so you do not need to use
471
+ a valid address when posting.
472
+
473
+ Finally, rest assured the core design of unicorn will never change.
474
+ It will never use new-fangled things like threads, kqueue or epoll;
475
+ but will always remain a preforking server serving one client
476
+ per-process.
477
+
478
+ [1] http://mid.gmane.org/20090211230457.GB22926@dcvr.yhbt.net
479
+ [2] this would've been like, totally gnarly in the 80s!
480
+
481
+ === unicorn 5.0.0.pre2 - another prerelease! / 2015-07-06 21:37 UTC
482
+
483
+ There is a minor TCP socket options are now applied to inherited
484
+ sockets, and we have native support for inheriting sockets from
485
+ systemd (by emulating the sd_listen_fds(3) function).
486
+
487
+ Dynamic changes in the application to Rack::Utils::HTTP_STATUS
488
+ codes is now supported, so you can use your own custom status
489
+ lines.
490
+
491
+ Ruby 2.2 and later is now favored for performance.
492
+ Optimizations by using constants which made sense in earlier
493
+ versions of Ruby are gone: so users of old Ruby versions
494
+ will see performance regressions. Ruby 2.2 users should
495
+ see the same or better performance, and we have less code
496
+ as a result.
497
+
498
+ * doc: update some invalid URLs
499
+ * apply TCP socket options on inherited sockets
500
+ * reflect changes in Rack::Utils::HTTP_STATUS_CODES
501
+ * reduce constants and optimize for Ruby 2.2
502
+ * http_response: reduce size of multi-line header path
503
+ * emulate sd_listen_fds for systemd support
504
+ * test/unit/test_response.rb: compatibility with older test-unit
505
+
506
+ This also includes all changes in unicorn 5.0.0.pre1:
507
+
508
+ http://bogomips.org/unicorn-public/m/20150615225652.GA16164@dcvr.yhbt.net.html
509
+
510
+ === unicorn 5.0.0.pre1 - incompatible changes! / 2015-06-15 22:49 UTC
511
+
512
+ This release finally drops Ruby 1.8 support and requires Ruby 1.9.3
513
+ or later. The horrible "Status:" header in our HTTP response is
514
+ finally gone, saving at least 16 precious bytes in every single HTTP
515
+ response.
516
+
517
+ Under Ruby 2.1 and later, the monotonic clock is used for timeout
518
+ handling for better accuracy.
519
+
520
+ Several experimental, unused and undocumented features are removed.
521
+
522
+ There's also tiny, minor performance and memory improvements from
523
+ dropping 1.8 compatibility, but probably nothing noticeable on a
524
+ typical real-life (bloated) app.
525
+
526
+ The biggest performance improvement we made was to our website by
527
+ switching to olddoc. Depending on connection speed, latency, and
528
+ renderer performance, it typically loads two to four times faster.
529
+
530
+ Finally, for the billionth time: unicorn must never be exposed
531
+ to slow clients, as it will never ever use new-fangled things
532
+ like non-blocking socket I/O, threads, epoll or kqueue. unicorn
533
+ must be used with a fully-buffering reverse proxy such as nginx
534
+ for slow clients.
535
+
536
+ * ISSUES: update with mailing list subscription
537
+ * GIT-VERSION-GEN: start 5.0.0 development
538
+ * http: remove xftrust options
539
+ * FAQ: add entry for Rails autoflush_log
540
+ * dev: remove isolate dependency
541
+ * unicorn.gemspec: depend on test-unit 3.0
542
+ * http_response: remove Status: header
543
+ * remove RubyForge and Freecode references
544
+ * remove mongrel.rubyforge.org references
545
+ * http: remove the keepalive requests limit
546
+ * http: reduce parser from 72 to 56 bytes on 64-bit
547
+ * examples: add run_once to before_fork hook example
548
+ * worker: remove old tmp accessor
549
+ * http_server: save 450+ bytes of memory on x86-64
550
+ * t/t0002-parser-error.sh: relax test for rack 1.6.0
551
+ * remove SSL support
552
+ * tmpio: drop the "size" method
553
+ * switch docs + website to olddoc
554
+ * README: clarify/reduce references to unicorn_rails
555
+ * gemspec: fixup olddoc migration
556
+ * use the monotonic clock under Ruby 2.1+
557
+ * http: -Wshorten-64-to-32 warnings on clang
558
+ * remove old inetd+git examples and exec_cgi
559
+ * http: standalone require + reduction in binary size
560
+ * GNUmakefile: fix clean gem build + reduce build cruft
561
+ * socket_helper: reduce constant lookups and caching
562
+ * remove 1.8, <= 1.9.1 fallback for missing IO#autoclose=
563
+ * favor IO#close_on_exec= over fcntl in 1.9+
564
+ * use require_relative to reduce syscalls at startup
565
+ * doc: update support status for Ruby versions
566
+ * fix uninstalled testing and reduce require paths
567
+ * test_socket_helper: do not depend on SO_REUSEPORT
568
+ * favor "a.b(&:c)" form over "a.b { |x| x.c }"
569
+ * ISSUES: add section for bugs in other projects
570
+ * http_server: favor ivars over constants
571
+ * explain 11 byte magic number for self-pipe
572
+ * const: drop constants used by Rainbows!
573
+ * reduce and localize constant string use
574
+ * Links: mark Rainbows! as historical, reference yahns
575
+ * save about 200 bytes of memory on x86-64
576
+ * http: remove deprecated reset method
577
+ * http: remove experimental dechunk! method
578
+ * socket_helper: update comments
579
+ * doc: document UNICORN_FD in manpage
580
+ * doc: document Etc.nprocessors for worker_processes
581
+ * favor more string literals for cold call sites
582
+ * tee_input: support for Rack::TempfileReaper middleware
583
+ * support TempfileReaper in deployment and development envs
584
+ * favor kgio_wait_readable for single FD over select
585
+ * Merge tag 'v4.9.0'
586
+ * http_request: support rack.hijack by default
587
+ * avoid extra allocation for hijack proc creation
588
+ * FAQ: add note about ECONNRESET errors from bodies
589
+ * process SIGWINCH unless stdin is a TTY
590
+ * ISSUES: discourage HTML mail strongly, welcome nyms
591
+ * http: use rb_hash_clear in Ruby 2.0+
592
+ * http_response: avoid special-casing for Rack < 1.5
593
+ * www: install NEWS.atom.xml properly
594
+ * http_server: remove a few more accessors and constants
595
+ * http_response: simplify regular expression
596
+ * move the socket into Rack env for hijacking
597
+ * http: move response_start_sent into the C ext
598
+ * FAQ: reorder bit on Rack 1.1.x and Rails 2.3.x
599
+ * ensure body is closed during hijack
600
+
601
+ === unicorn 4.9.0 - TempfileReaper support in Rack 1.6 / 2015-04-24 03:09 UTC
602
+
603
+ This release supports the Rack::TempfileReaper middleware found
604
+ in rack 1.6 for cleaning up disk space used by temporary files.
605
+ We also use Rack::TempfileReaper for cleaning up large temporary
606
+ files buffered with TeeInput. Users on rack 1.5 and earlier
607
+ will see no changes.
608
+
609
+ There's also a bunch of documentation/build system improvements.
610
+
611
+ This is likely to be the last Ruby 1.8-compatible release,
612
+ unicorn 5.x will require 1.9.3 or later as well as dropping lots
613
+ of cruft (the stupid "Status:" header in responses being the
614
+ most notable).
615
+
616
+ 21 changes backported from master:
617
+
618
+ ISSUES: update with mailing list subscription
619
+ FAQ: add entry for Rails autoflush_log
620
+ dev: remove isolate dependency
621
+ unicorn.gemspec: depend on test-unit 3.0
622
+ remove RubyForge and Freecode references
623
+ remove mongrel.rubyforge.org references
624
+ examples: add run_once to before_fork hook example
625
+ t/t0002-parser-error.sh: relax test for rack 1.6.0
626
+ switch docs + website to olddoc
627
+ README: clarify/reduce references to unicorn_rails
628
+ gemspec: fixup olddoc migration
629
+ GNUmakefile: fix clean gem build + reduce build cruft
630
+ doc: update support status for Ruby versions
631
+ fix uninstalled testing and reduce require paths
632
+ test_socket_helper: do not depend on SO_REUSEPORT
633
+ ISSUES: add section for bugs in other projects
634
+ explain 11 byte magic number for self-pipe
635
+ Links: mark Rainbows! as historical, reference yahns
636
+ doc: document UNICORN_FD in manpage
637
+ tee_input: support for Rack::TempfileReaper middleware
638
+ support TempfileReaper in deployment and development envs
639
+
640
+ === unicorn 4.8.3 - the end of an era / 2014-05-07 07:50 UTC
641
+
642
+ This release updates documentation to reflect the migration of the
643
+ mailing list to a new public-inbox[1] instance. This is necessary
644
+ due to the impending RubyForge shutdown on May 15, 2014.
645
+
646
+ The public-inbox address is: unicorn-public@bogomips.org
647
+ (no subscription required, plain text only)
648
+ ssoma[2] git archives: git://bogomips.org/unicorn-public
649
+ browser-friendly archives: http://bogomips.org/unicorn-public/
650
+
651
+ Using, getting help for, and contributing to unicorn will never
652
+ require any of the following:
653
+
654
+ 1) non-Free software (including SaaS)
655
+ 2) registration or sign-in of any kind
656
+ 3) a real identity (we accept mail from Mixmaster)
657
+ 4) a graphical user interface
658
+
659
+ Nowadays, plain-text email is the only ubiquitous platform which
660
+ meets all our requirements for communication.
661
+
662
+ There is also one small bugfix to handle premature grandparent death
663
+ upon initial startup. Most users are unaffected.
664
+
665
+ [1] policy: http://public-inbox.org/ - git://80x24.org/public-inbox
666
+ an "archives first" approach to mailing lists
667
+ [2] mechanism: http://ssoma.public-inbox.org/ - git://80x24.org/ssoma
668
+ some sort of mail archiver (using git)
669
+
670
+ === unicorn 4.8.2 - avoid race condition during worker startup / 2014-02-05 18:24 UTC
671
+
672
+ We close SELF_PIPE in the worker immediately, but signal handlers
673
+ do not get setup immediately. So prevent workers from erroring out
674
+ due to invalid SELF_PIPE.
675
+
676
+ === unicorn 4.8.1 / 2014-01-29 08:48 UTC
677
+
678
+ fix races/error handling in worker SIGQUIT handler
679
+
680
+ This protects us from two problems:
681
+
682
+ 1) we (or our app) somehow called IO#close on one of the sockets
683
+ we listen on without removing it from the readers array.
684
+ We'll ignore IOErrors from IO#close and assume we wanted to
685
+ close it.
686
+
687
+ 2) our SIGQUIT handler is interrupted by itself. This can happen as
688
+ a fake signal from the master could be handled and a real signal
689
+ from an outside user is sent to us (e.g. from unicorn-worker-killer)
690
+ or if a user uses the killall(1) command.
691
+
692
+ === unicorn 4.8.0 - big internal changes, but compatible / 2014-01-11 07:34 UTC
693
+
694
+ This release contains fairly major internal workings of master-to-worker
695
+ notifications. The master process no longer sends signals to workers
696
+ for most tasks. This works around some compatibility issues with some
697
+ versions of the "pg" gem (and potentially any other code which may not
698
+ handle EINTR properly). One extra benefit is it also helps stray
699
+ workers notice a rare, unexpected master death more easily. Workers
700
+ continue to (and will always) accept existing signals for compatibility
701
+ with tools/scripts which may signal workers.
702
+
703
+ PID file are always written early (even on upgrade) again to avoid
704
+ breaking strange monitoring setups which use PID files. Keep in mind we
705
+ have always discouraged monitoring based on PID files as they are
706
+ fragile.
707
+
708
+ We now avoid bubbling IOError to the Rack app on premature client
709
+ disconnects when streaming the input body. This is usually not a
710
+ problem with nginx, but may be on some LAN setups without nginx).
711
+
712
+ Thanks to Sam Saffron, Jimmy Soho, Rodrigo Rosenfeld Rosas,
713
+ Michael Fischer, and Andrew Hobson for their help with this release.
714
+
715
+ Note: the unicorn mailing list will be moved/changed soon due to the
716
+ RubyForge shutdown. unicorn will always rely only on Free Software.
717
+ There will never be any sign-up requirements nor terms-of-service to
718
+ agree to when communicating with us.
719
+
720
+ === unicorn 4.8.0pre1 / 2013-12-09 09:51 UTC
721
+
722
+ Eric Wong (6):
723
+ tests: fix SO_REUSEPORT tests for old Linux and non-Linux
724
+ stream_input: avoid IO#close on client disconnect
725
+ t0300: kill off stray processes in test
726
+ always write PID file early for compatibility
727
+ doc: clarify SIGNALS and reference init example
728
+ rework master-to-worker signaling to use a pipe
729
+
1
730
  === unicorn 4.7.0 - minor updates, license tweak / 2013-11-04 06:59 UTC
2
731
 
3
732
  * support SO_REUSEPORT on new listeners (:reuseport)