unicorn 4.7.0 → 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +0 -1
- data/.gitattributes +5 -0
- data/.gitignore +2 -2
- data/.manifest +14 -21
- data/.olddoc.yml +22 -0
- data/Application_Timeouts +7 -7
- data/DESIGN +2 -4
- data/Documentation/.gitignore +1 -3
- data/Documentation/unicorn.1 +222 -0
- data/Documentation/unicorn_rails.1 +207 -0
- data/FAQ +23 -6
- data/GIT-VERSION-FILE +1 -1
- data/GIT-VERSION-GEN +1 -1
- data/GNUmakefile +139 -92
- data/HACKING +13 -28
- data/ISSUES +82 -19
- data/KNOWN_ISSUES +18 -18
- data/LATEST +22 -44
- data/LICENSE +2 -2
- data/Links +24 -22
- data/NEWS +729 -0
- data/PHILOSOPHY +0 -6
- data/README +50 -48
- data/Rakefile +0 -44
- data/SIGNALS +12 -3
- data/Sandbox +11 -10
- data/TODO +0 -2
- data/TUNING +30 -9
- data/archive/.gitignore +3 -0
- data/archive/slrnpull.conf +4 -0
- data/bin/unicorn +4 -2
- data/bin/unicorn_rails +3 -3
- data/examples/big_app_gc.rb +1 -1
- data/examples/init.sh +36 -8
- data/examples/logrotate.conf +17 -2
- data/examples/nginx.conf +14 -14
- data/examples/unicorn.conf.minimal.rb +2 -2
- data/examples/unicorn.conf.rb +14 -6
- data/examples/unicorn.socket +11 -0
- data/examples/unicorn@.service +40 -0
- data/ext/unicorn_http/common_field_optimization.h +23 -5
- data/ext/unicorn_http/ext_help.h +0 -20
- data/ext/unicorn_http/extconf.rb +37 -1
- data/ext/unicorn_http/global_variables.h +1 -1
- data/ext/unicorn_http/httpdate.c +2 -2
- data/ext/unicorn_http/unicorn_http.c +940 -644
- data/ext/unicorn_http/unicorn_http.rl +167 -170
- data/ext/unicorn_http/unicorn_http_common.rl +1 -1
- data/lib/unicorn/configurator.rb +110 -46
- data/lib/unicorn/const.rb +2 -25
- data/lib/unicorn/http_request.rb +110 -31
- data/lib/unicorn/http_response.rb +17 -31
- data/lib/unicorn/http_server.rb +292 -199
- data/lib/unicorn/launcher.rb +1 -1
- data/lib/unicorn/oob_gc.rb +16 -6
- data/lib/unicorn/socket_helper.rb +58 -78
- data/lib/unicorn/stream_input.rb +9 -11
- data/lib/unicorn/tee_input.rb +16 -11
- data/lib/unicorn/tmpio.rb +10 -6
- data/lib/unicorn/util.rb +5 -4
- data/lib/unicorn/version.rb +1 -1
- data/lib/unicorn/worker.rb +99 -22
- data/lib/unicorn.rb +69 -42
- data/man/man1/unicorn.1 +124 -122
- data/man/man1/unicorn_rails.1 +113 -127
- data/t/.gitignore +0 -1
- data/t/GNUmakefile +3 -80
- data/t/README +4 -4
- data/t/t0002-parser-error.sh +3 -3
- data/t/t0011-active-unix-socket.sh +1 -1
- data/t/t0012-reload-empty-config.sh +2 -1
- data/t/t0300-no-default-middleware.sh +6 -1
- data/t/t0301-no-default-middleware-ignored-in-config.sh +25 -0
- data/t/t0301.ru +13 -0
- data/t/test-lib.sh +2 -2
- data/test/benchmark/README +14 -4
- data/test/benchmark/ddstream.ru +50 -0
- data/test/benchmark/readinput.ru +40 -0
- data/test/benchmark/uconnect.perl +66 -0
- data/test/exec/test_exec.rb +74 -20
- data/test/test_helper.rb +42 -33
- data/test/unit/test_ccc.rb +91 -0
- data/test/unit/test_droplet.rb +1 -1
- data/test/unit/test_http_parser.rb +49 -19
- data/test/unit/test_http_parser_ng.rb +98 -115
- data/test/unit/test_request.rb +11 -11
- data/test/unit/test_response.rb +31 -19
- data/test/unit/test_server.rb +89 -15
- data/test/unit/test_signals.rb +9 -9
- data/test/unit/test_socket_helper.rb +20 -14
- data/test/unit/test_tee_input.rb +10 -0
- data/test/unit/test_upload.rb +10 -15
- data/test/unit/test_util.rb +28 -3
- data/unicorn.gemspec +28 -23
- data/unicorn_1 +1 -0
- data/unicorn_rails_1 +1 -0
- metadata +64 -134
- data/.wrongdoc.yml +0 -10
- data/ChangeLog +0 -4694
- data/Documentation/GNUmakefile +0 -30
- data/Documentation/unicorn.1.txt +0 -178
- data/Documentation/unicorn_rails.1.txt +0 -175
- data/examples/git.ru +0 -13
- data/lib/unicorn/app/exec_cgi.rb +0 -154
- data/lib/unicorn/app/inetd.rb +0 -109
- data/lib/unicorn/ssl_client.rb +0 -11
- data/lib/unicorn/ssl_configurator.rb +0 -104
- data/lib/unicorn/ssl_server.rb +0 -42
- data/local.mk.sample +0 -59
- data/script/isolate_for_tests +0 -32
- data/t/hijack.ru +0 -42
- data/t/sslgen.sh +0 -71
- data/t/t0016-trust-x-forwarded-false.sh +0 -30
- data/t/t0017-trust-x-forwarded-true.sh +0 -30
- data/t/t0200-rack-hijack.sh +0 -27
- data/t/t0600-https-server-basic.sh +0 -48
- data/test/unit/test_http_parser_xftrust.rb +0 -38
- 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)
|