unicorn 3.6.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. data/.document +1 -0
  2. data/.manifest +13 -0
  3. data/ChangeLog +783 -1
  4. data/DESIGN +0 -8
  5. data/Documentation/GNUmakefile +1 -1
  6. data/GIT-VERSION-FILE +1 -1
  7. data/GIT-VERSION-GEN +1 -1
  8. data/GNUmakefile +2 -2
  9. data/HACKING +11 -0
  10. data/KNOWN_ISSUES +2 -2
  11. data/LATEST +24 -24
  12. data/Links +53 -0
  13. data/NEWS +66 -0
  14. data/PHILOSOPHY +49 -49
  15. data/Sandbox +13 -4
  16. data/TODO +0 -2
  17. data/TUNING +31 -9
  18. data/bin/unicorn +2 -1
  19. data/bin/unicorn_rails +2 -1
  20. data/examples/big_app_gc.rb +2 -33
  21. data/examples/nginx.conf +17 -4
  22. data/ext/unicorn_http/ext_help.h +16 -0
  23. data/ext/unicorn_http/extconf.rb +1 -0
  24. data/ext/unicorn_http/global_variables.h +9 -3
  25. data/ext/unicorn_http/unicorn_http.c +357 -259
  26. data/ext/unicorn_http/unicorn_http.rl +148 -50
  27. data/lib/unicorn/configurator.rb +36 -8
  28. data/lib/unicorn/const.rb +5 -3
  29. data/lib/unicorn/http_request.rb +1 -3
  30. data/lib/unicorn/http_server.rb +82 -95
  31. data/lib/unicorn/oob_gc.rb +61 -50
  32. data/lib/unicorn/socket_helper.rb +23 -8
  33. data/lib/unicorn/worker.rb +45 -4
  34. data/lib/unicorn.rb +8 -6
  35. data/script/isolate_for_tests +4 -2
  36. data/t/broken-app.ru +12 -0
  37. data/t/heartbeat-timeout.ru +12 -0
  38. data/t/oob_gc.ru +21 -0
  39. data/t/oob_gc_path.ru +21 -0
  40. data/t/t0001-reload-bad-config.sh +1 -0
  41. data/t/t0002-parser-error.sh +64 -1
  42. data/t/t0004-heartbeat-timeout.sh +69 -0
  43. data/t/t0009-broken-app.sh +56 -0
  44. data/t/t0019-max_header_len.sh +49 -0
  45. data/t/t0020-at_exit-handler.sh +49 -0
  46. data/t/t9001-oob_gc.sh +47 -0
  47. data/t/t9002-oob_gc-path.sh +75 -0
  48. data/test/benchmark/stack.ru +8 -0
  49. data/test/unit/test_droplet.rb +28 -0
  50. data/test/unit/test_http_parser.rb +60 -4
  51. data/test/unit/test_http_parser_ng.rb +54 -0
  52. data/test/unit/test_response.rb +1 -1
  53. data/test/unit/test_server.rb +1 -1
  54. data/test/unit/test_signals.rb +1 -1
  55. data/test/unit/test_socket_helper.rb +8 -0
  56. data/test/unit/test_upload.rb +1 -1
  57. data/unicorn.gemspec +3 -2
  58. metadata +44 -16
data/ChangeLog CHANGED
@@ -1,5 +1,749 @@
1
- ChangeLog from http://bogomips.org/unicorn.git (v1.1.5..v3.6.0)
1
+ ChangeLog from http://bogomips.org/unicorn.git (v1.1.5..v4.0.0)
2
2
 
3
+ commit fb8bb4469849fa2b2241152aea7e9e82bd3cbcc8
4
+ Author: Eric Wong <normalperson@yhbt.net>
5
+ Date: Mon Jun 27 08:12:58 2011 +0000
6
+
7
+ unicorn 4.0.0 - for mythical hardware!
8
+
9
+ A single Unicorn instance may manage more than 1024 workers
10
+ without needing privileges to modify resource limits. As a
11
+ result of this, the "raindrops"[1] gem/library is now a required
12
+ dependency.
13
+
14
+ TCP socket defaults now favor low latency to mimic UNIX domain
15
+ socket behavior (tcp_nodelay: true, tcp_nopush: false). This
16
+ hurts throughput, users who want to favor throughput should
17
+ specify "tcp_nodelay: false, tcp_nopush: true" in the listen
18
+ directive.
19
+
20
+ Error logging is more consistent and all lines should be
21
+ formatted correctly in backtraces. This may break the
22
+ behavior of some log parsers.
23
+
24
+ The call stack is smaller and thus easier to examine backtraces
25
+ when debugging Rack applications.
26
+
27
+ There are some internal API changes and cleanups, but none that
28
+ affect applications designed for Rack. See "git log v3.7.0.."
29
+ for details.
30
+
31
+ For users who cannot install kgio[2] or raindrops, Unicorn 1.1.x
32
+ remains supported indefinitely. Unicorn 3.x will remain
33
+ supported if there is demand. We expect raindrops to introduce
34
+ fewer portability problems than kgio did, however.
35
+
36
+ [1] http://raindrops.bogomips.org/
37
+ [2] http://bogomips.org/kgio/
38
+
39
+ commit 4785db8cf19899756c4a79462fed861a1d1bd96c
40
+ Author: Eric Wong <normalperson@yhbt.net>
41
+ Date: Mon Jun 27 08:46:28 2011 +0000
42
+
43
+ slightly faster worker process spawning
44
+
45
+ It's still O(n) since we don't maintain a reverse mapping of
46
+ spawned processes, but at least we avoid the extra overhead of
47
+ creating an array every time.
48
+
49
+ commit 441bb8ab48f15f583b82a3f8520648a4694a198f
50
+ Author: Eric Wong <normalperson@yhbt.net>
51
+ Date: Sat Jun 25 22:40:20 2011 +0000
52
+
53
+ reenable heartbeat checking for idle workers
54
+
55
+ Some applications/libraries may launch background threads which
56
+ can lock up the process. So we can't disable heartbeat checking
57
+ just because the main thread is sleeping. This also has the
58
+ side effect of reducing master process wakeups when all workers
59
+ are idle.
60
+
61
+ commit 63bcecf48994aa9afe6dc2890efe3ba4b0696bbf
62
+ Author: Eric Wong <normalperson@yhbt.net>
63
+ Date: Fri Jun 24 08:17:02 2011 +0000
64
+
65
+ test with latest kgio and rack versions
66
+
67
+ We'll continue to support older versions, but make
68
+ sure things on the latest ones work.
69
+
70
+ commit 079eb70692fcda9b4bcf572319434ffa7f9e9849
71
+ Author: Eric Wong <normalperson@yhbt.net>
72
+ Date: Fri Jun 24 07:19:22 2011 +0000
73
+
74
+ allow multiline comments in config.ru
75
+
76
+ This matches the latest Rack behavior.
77
+
78
+ We can't just use Rack::Builder.parse_file because our option
79
+ parser logic is slightly different and incompatible.
80
+
81
+ ref: rack commit d31cf2b7c0c77c04510c08d95776315ceb24ba54
82
+
83
+ commit b3b6b0dff19f8a22a96525bba22bf061d03c3fc5
84
+ Author: Eric Wong <normalperson@yhbt.net>
85
+ Date: Thu Jun 23 05:12:08 2011 +0000
86
+
87
+ http_server: avoid race conditions on SIGQUIT
88
+
89
+ We don't want the Worker#tick= assignment to trigger after we
90
+ accept a client, since we'd drop that request when we raise the
91
+ exception that breaks us out of the worker loop.
92
+
93
+ Also, we don't want to enter IO.select with an empty LISTENERS
94
+ array so we can fail with IOError or Errno::EBADF.
95
+
96
+ commit fbe48964d79f3d592f4f75960c5940add9ccf22a
97
+ Author: Eric Wong <normalperson@yhbt.net>
98
+ Date: Wed Jun 22 07:48:36 2011 +0000
99
+
100
+ http_server: remove unused variable
101
+
102
+ A leftover from the fchmod() days
103
+
104
+ commit 1a2dc92e7ff92157aa12e2c8a8a09ec0d56e0eb6
105
+ Author: Eric Wong <normalperson@yhbt.net>
106
+ Date: Wed Jun 22 02:06:46 2011 +0000
107
+
108
+ gemspec: fix raindrops dependency
109
+
110
+ Oops, I suck at Ruby :x
111
+
112
+ commit de142bc61f714392b0902b6e66a31c34ba223cdb
113
+ Author: Eric Wong <normalperson@yhbt.net>
114
+ Date: Wed Jun 22 02:05:20 2011 +0000
115
+
116
+ TODO: remove scalability to >= 1024 workers item
117
+
118
+ We can do it!
119
+
120
+ commit b08410facbccf96c67822a92888de0bc1910390e
121
+ Author: Eric Wong <normalperson@yhbt.net>
122
+ Date: Fri Jun 17 08:59:02 2011 +0000
123
+
124
+ test_http_parser: fix for URI too long errors (#3)
125
+
126
+ The random garbage generator may occasionally generate URIs that
127
+ are too long and cause the URI-specific error to be raised
128
+ instead of the generic parser error we recently introduced.
129
+
130
+ Follow-up-to: commit 742c4d77f179a757dbcb1fa350f9d75b757acfc7
131
+
132
+ commit 5f478f5a9a58f72c0a844258b8ee614bf24ea9f7
133
+ Author: Eric Wong <normalperson@yhbt.net>
134
+ Date: Fri Jun 17 08:54:37 2011 +0000
135
+
136
+ error logging is more consistent
137
+
138
+ Backtraces are now formatted properly (with timestamps) and
139
+ exceptions will be logged more consistently and similar to
140
+ Logger defaults:
141
+
142
+ "#{exc.message} (#{e.class})"
143
+ backtrace.each { |line| ... }
144
+
145
+ This may break some existing monitoring scripts, but errors
146
+ will be more standardized and easier to check moving forward.
147
+
148
+ commit fa7ce0a6a755cb71a30417478fb797ee7b8d94b5
149
+ Author: Eric Wong <normalperson@yhbt.net>
150
+ Date: Fri Jun 17 07:32:17 2011 +0000
151
+
152
+ add broken app test from Rainbows!
153
+
154
+ "app error" is more correct, and consistent with Rainbows!
155
+
156
+ commit 593deb92e8ebd4e77e482c567d97b6ee496ac378
157
+ Author: Eric Wong <normalperson@yhbt.net>
158
+ Date: Thu Jun 16 23:57:31 2011 +0000
159
+
160
+ ensure at_exit handlers run on graceful shutdown
161
+
162
+ rescuing from SystemExit and exit()-ing again is ugly, but
163
+ changes made to lower stack depth positively affect _everyone_
164
+ so we'll tolerate some ugliness here.
165
+
166
+ We'll need to disable graceful exit for some tests, too...
167
+
168
+ commit a0c59adf71506b8808de276b1288a319424ee71a
169
+ Author: Eric Wong <normalperson@yhbt.net>
170
+ Date: Thu Jun 16 22:54:40 2011 +0000
171
+
172
+ replace fchmod()-based heartbeat with raindrops
173
+
174
+ This means we no longer waste an extra file descriptor per
175
+ worker process in the master. Now there's no need to set a
176
+ higher file descriptor limit for systems running >= 1024
177
+ workers.
178
+
179
+ commit 95f543a9583e58c56b1c480df84b4b88e6669403
180
+ Author: Eric Wong <normalperson@yhbt.net>
181
+ Date: Thu Jun 16 23:11:28 2011 +0000
182
+
183
+ add heartbeat timeout test from Rainbows!
184
+
185
+ Just in case we break anything
186
+
187
+ commit 4beeb52b1c52ea4486dea13cebe2a8438a9f2139
188
+ Author: Eric Wong <normalperson@yhbt.net>
189
+ Date: Wed Jun 15 01:10:07 2011 +0000
190
+
191
+ memory reductions in worker process
192
+
193
+ There's absolutely no need to keep the OptionParser around in
194
+ worker processes.
195
+
196
+ commit e9e7a1c7c1778ed7cd7c724b26362d1f89b2801c
197
+ Author: Eric Wong <normalperson@yhbt.net>
198
+ Date: Wed Jun 15 00:56:47 2011 +0000
199
+
200
+ test_http_parser: fix for URI too long errors (again)
201
+
202
+ The random garbage generator may occasionally generate URIs that
203
+ are too long and cause the URI-specific error to be raised
204
+ instead of the generic parser error we recently introduced.
205
+
206
+ Follow-up-to: commit 742c4d77f179a757dbcb1fa350f9d75b757acfc7
207
+
208
+ commit a7d9eb03bf3ac554854990018a67f34c2221fb20
209
+ Author: Eric Wong <normalperson@yhbt.net>
210
+ Date: Wed Jun 15 00:53:45 2011 +0000
211
+
212
+ http_server: kill another stack frame off
213
+
214
+ We always know we have zero workers at startup, so we don't
215
+ need to check before hand. SIGHUP users may suffer a small
216
+ performance decrease as a result, but there's not much we
217
+ can do about it.
218
+
219
+ commit f8953ce747bd35b2008fc3daa040b89002a3133e
220
+ Author: Eric Wong <normalperson@yhbt.net>
221
+ Date: Wed Jun 15 00:47:25 2011 +0000
222
+
223
+ http_server: factor out inherit_listeners! method
224
+
225
+ This should be easier to understand and reduces garbage on
226
+ stack, too.
227
+
228
+ commit 6aa423454d7c3926297426fc22d23c88531bd15a
229
+ Author: Eric Wong <normalperson@yhbt.net>
230
+ Date: Wed Jun 15 00:45:37 2011 +0000
231
+
232
+ test_response: httpdate is low resolution
233
+
234
+ It may return the previous second
235
+
236
+ commit 63e421d82ac6d838f9b8b02d4a727bf6f783e7b6
237
+ Author: Eric Wong <normalperson@yhbt.net>
238
+ Date: Wed Jun 15 00:39:37 2011 +0000
239
+
240
+ remove BasicSocket.do_not_reverse_lookup setting
241
+
242
+ kgio never does reverse lookup
243
+
244
+ commit 12024a6268d4e96fcf96df33fb7d82eaec9c16b1
245
+ Author: Eric Wong <normalperson@yhbt.net>
246
+ Date: Wed Jun 15 00:20:26 2011 +0000
247
+
248
+ http: delay CoW string invalidations in filter_body
249
+
250
+ Not all invocations of filter_body will trigger CoW on the
251
+ given destination string. We can also avoid an unnecessary
252
+ rb_str_set_len() in the non-chunked path, too.
253
+
254
+ commit d91ca210615432bdad3ee70c08908ea7064c6b95
255
+ Author: Eric Wong <normalperson@yhbt.net>
256
+ Date: Wed Jun 15 00:15:42 2011 +0000
257
+
258
+ http: remove tainting flag
259
+
260
+ Needless line noise, kgio doesn't support tainting anyways.
261
+
262
+ commit c719497c6db220a9f58c71970f2370cb2e6c99c3
263
+ Author: Eric Wong <normalperson@yhbt.net>
264
+ Date: Wed Jun 15 00:09:32 2011 +0000
265
+
266
+ http_server: get rid of EINTR checks
267
+
268
+ Ruby IO.select never raises that, actually
269
+
270
+ commit 742c4d77f179a757dbcb1fa350f9d75b757acfc7
271
+ Author: Eric Wong <normalperson@yhbt.net>
272
+ Date: Wed Jun 15 00:08:03 2011 +0000
273
+
274
+ test_http_parser: fix for URI too long errors
275
+
276
+ The random garbage generator may occasionally generate URIs that
277
+ are too long and cause the URI-specific error to be raised
278
+ instead of the generic parser error we recently introduced.
279
+
280
+ commit 20c0f28cf60f164c9788b694625bce22962464f3
281
+ Author: Eric Wong <normalperson@yhbt.net>
282
+ Date: Wed Jun 15 00:01:32 2011 +0000
283
+
284
+ http_server: further reduce stack usage for app.call
285
+
286
+ By avoid Array#each
287
+
288
+ commit ddcea26976f24dda8a0cd65022065100bb40fbb7
289
+ Author: Eric Wong <normalperson@yhbt.net>
290
+ Date: Tue Jun 14 23:49:57 2011 +0000
291
+
292
+ http_server: small cleanups for attr assignments
293
+
294
+ ivar references using @ are slightly faster than calling
295
+ attribute methods.
296
+
297
+ commit f1d8dd94122395cd7b072aeec8942f2cd6b8ca99
298
+ Author: Eric Wong <normalperson@yhbt.net>
299
+ Date: Tue Jun 14 23:25:43 2011 +0000
300
+
301
+ http_server: do not rescue from proper exits
302
+
303
+ Oops, it messes logging up badly.
304
+
305
+ commit 2f3c135b15e6603e71bb9d6d054e5cd606c7b2b6
306
+ Author: Eric Wong <normalperson@yhbt.net>
307
+ Date: Tue Jun 14 00:51:01 2011 +0000
308
+
309
+ http: fix documentation for dechunk!
310
+
311
+ chunk_ready! was my original name for it, but I'm indecisive
312
+ when it comes to naming things.
313
+
314
+ commit c297fde2000dcc8bdf7cb9f912fb2ea07be1c282
315
+ Author: Eric Wong <normalperson@yhbt.net>
316
+ Date: Mon Jun 13 23:42:54 2011 +0000
317
+
318
+ http: dechunk! method to enter dechunk mode
319
+
320
+ This allows one to enter the dechunker without parsing
321
+ HTTP headers beforehand. Since we skipped header parsing,
322
+ trailer parsing is not supported since we don't know
323
+ what trailers might be (to our knowledge, nobody uses trailers
324
+ anyways)
325
+
326
+ commit 131c241840990753f7b75344092058ef7434ea8b
327
+ Author: Eric Wong <normalperson@yhbt.net>
328
+ Date: Mon Jun 13 22:35:18 2011 +0000
329
+
330
+ http: document reasoning for memcpy in filter_body
331
+
332
+ copy-on-write behavior doesn't help you if your common
333
+ use case triggers copies.
334
+
335
+ commit 4aa8fd1322ccb46fc58a4f26ca111a03c1720c7d
336
+ Author: Eric Wong <normalperson@yhbt.net>
337
+ Date: Mon Jun 13 22:18:30 2011 +0000
338
+
339
+ http: rename variables in filter_body implementation
340
+
341
+ Makes things easier-to-understand since it's based on memcpy()
342
+
343
+ commit b1d8d3de991ebc5b7d655f2e8a1294129021db8a
344
+ Author: Eric Wong <normalperson@yhbt.net>
345
+ Date: Mon Jun 13 22:17:14 2011 +0000
346
+
347
+ change TCP defaults to favor low latency
348
+
349
+ These TCP settings are a closer match to the behavior of
350
+ Unix domain sockets and what users expect for fast streaming
351
+ responses even if nginx can't provide them just now...
352
+
353
+ commit c1cac62571b543ac8e9f7203f8c315bb75516a20
354
+ Author: Eric Wong <normalperson@yhbt.net>
355
+ Date: Mon Jun 13 21:44:24 2011 +0000
356
+
357
+ gemspec: bump kgio dependency to ~> 2.4
358
+
359
+ kgio 2.4.1 portability should be better than 2.3, so
360
+ less user confusion and push them towards 2.4
361
+
362
+ commit 5d2284afdc2d4f4ff122394ae5fd78a32cb8c09e
363
+ Author: Eric Wong <normalperson@yhbt.net>
364
+ Date: Fri Jun 10 23:54:47 2011 +0000
365
+
366
+ runtime stack size reductions
367
+
368
+ This reduces the size of `caller` by 5 frames,
369
+ which should make backtraces easier-to-read, raising
370
+ exceptions less expensive, and reduce GC runtime.
371
+
372
+ commit 987b9496171b090e62de488ddc7b9a175c4c8d33
373
+ Author: Eric Wong <normalperson@yhbt.net>
374
+ Date: Fri Jun 10 23:44:10 2011 +0000
375
+
376
+ test/benchmark/stack.ru: app for measuring stack depth
377
+
378
+ Stack depth affects Ruby GC performance, so lowering it
379
+ makes sense
380
+
381
+ commit 1c033dfd66c713afb05911e5e220adb7fc4ddc17
382
+ Author: Eric Wong <normalperson@yhbt.net>
383
+ Date: Thu Jun 9 13:36:20 2011 -0700
384
+
385
+ unicorn 3.7.0 - minor feature update
386
+
387
+ * miscellaneous documentation improvements
388
+ * return 414 (instead of 400) for Request-URI Too Long
389
+ * strip leading and trailing linear whitespace in header values
390
+
391
+ User-visible improvements meant for Rainbows! users:
392
+
393
+ * add :ipv6only "listen" option (same as nginx)
394
+
395
+ commit c3880bb0cc00821d1715a7dd94b0b76a03a7ace0
396
+ Author: Eric Wong <normalperson@yhbt.net>
397
+ Date: Tue Jun 7 13:54:18 2011 -0700
398
+
399
+ configurator: add :ipv6only directive
400
+
401
+ Enabling this flag for an IPv6 TCP listener allows users to
402
+ specify IPv6-only listeners regardless of the OS default.
403
+ This should be interest to Rainbows! users.
404
+
405
+ commit 0dc56fd03ea478ae054e3d0398703f43e017723b
406
+ Author: Eric Wong <normalperson@yhbt.net>
407
+ Date: Tue Jun 7 09:56:30 2011 -0700
408
+
409
+ build: ensure gem and tgz targets build manpages
410
+
411
+ Original patch by Hongli Lai <hongli@phusion.nl>:
412
+
413
+ > >From bfefc2cf0efb0913a42862886363b3140dcdbb2a Mon Sep 17 00:00:00 2001
414
+ > From: Hongli Lai (Phusion) <hongli@phusion.nl>
415
+ > Date: Mon, 6 Jun 2011 13:39:00 +0200
416
+ > Subject: [PATCH] Ensure that 'make gem' builds the documentation too.
417
+ >
418
+ > If autogenerated documentation files, like man pages, don't exist then
419
+ > 'make gem' will fail, complaining that some files are not found. By
420
+ > depending the 'gem' target on the 'doc' target we ensure that 'make gem'
421
+ > always works.
422
+ >
423
+ > Signed-off-by: Hongli Lai (Phusion) <hongli@phusion.nl>
424
+
425
+ ref: http://mid.gmane.org/4DED0EE2.7040400@phusion.nl
426
+
427
+ commit 6eefc641c84eaa86cb2be4a2b1983b15efcbfae1
428
+ Author: Eric Wong <normalperson@yhbt.net>
429
+ Date: Tue Jun 7 09:38:34 2011 -0700
430
+
431
+ examples/nginx.conf: better wording for ipv6only comment
432
+
433
+ Oops.
434
+
435
+ commit 32b340b88915ec945ebdbfa11b7da242860a6f44
436
+ Author: Eric Wong <normalperson@yhbt.net>
437
+ Date: Mon Jun 6 19:15:36 2011 -0700
438
+
439
+ examples/nginx.conf: add ipv6only comment
440
+
441
+ IPv4-mapped-IPv6 addresses are fugly.
442
+
443
+ commit f4b9c1cb92711a62ae047368d7694c5050d27f2c
444
+ Author: Eric Wong <normalperson@yhbt.net>
445
+ Date: Mon Jun 6 10:00:36 2011 -0700
446
+
447
+ Documentation: remove --sanitize-html for pandoc
448
+
449
+ pandoc 1.8 no longer has this.
450
+
451
+ commit 8e8781aa7002079ad066c11d271b98fc29f225dd
452
+ Author: Hongli Lai (Phusion) <hongli@phusion.nl>
453
+ Date: Mon Jun 6 13:36:57 2011 +0200
454
+
455
+ Document the method for building the Unicorn gem.
456
+
457
+ Signed-off-by: Hongli Lai (Phusion) <hongli@phusion.nl>
458
+
459
+ commit 6e550cabdafd2cb0fcd1617f8815a732e79af670
460
+ Author: Eric Wong <normalperson@yhbt.net>
461
+ Date: Mon May 23 23:59:53 2011 +0000
462
+
463
+ isolate_for_tests: use rake 0.8.7
464
+
465
+ Rails 3.0.0 can't use Rake 0.9.0 it seems.
466
+
467
+ commit 3e8971f3998249c58c9958815e0f17a04256ef9f
468
+ Author: Eric Wong <normalperson@yhbt.net>
469
+ Date: Mon May 23 23:59:31 2011 +0000
470
+
471
+ gemspec: use latest Isolate (3.1)
472
+
473
+ It's required for RubyGems 1.8.x
474
+
475
+ commit 67e1fa9f9535ad009d538b8189bb3bdec0e5f79c
476
+ Author: Eric Wong <normalperson@yhbt.net>
477
+ Date: Mon May 23 21:53:19 2011 +0000
478
+
479
+ http: call rb_str_modify before rb_str_resize
480
+
481
+ Ruby 1.9.3dev (trunk) requires it if the string size
482
+ is unchanged.
483
+
484
+ commit 1b31c40997ff8b932a457275e9a2f219de1d32c8
485
+ Author: Eric Wong <normalperson@yhbt.net>
486
+ Date: Mon May 23 21:04:56 2011 +0000
487
+
488
+ strip trailing and leading linear whitespace in headers
489
+
490
+ RFC 2616, section 4.2:
491
+ > The field-content does not include any leading or trailing LWS:
492
+ > linear white space occurring before the first non-whitespace
493
+ > character of the field-value or after the last non-whitespace
494
+ > character of the field-value. Such leading or trailing LWS MAY be
495
+ > removed without changing the semantics of the field value. Any LWS
496
+ > that occurs between field-content MAY be replaced with a single SP
497
+ > before interpreting the field value or forwarding the message
498
+ > downstream.
499
+
500
+ commit 947704e3f8e67b8262815838e87b331802c7ba67
501
+ Author: Eric Wong <normalperson@yhbt.net>
502
+ Date: Mon May 23 18:22:44 2011 +0000
503
+
504
+ doc: add Links page to help folks find relevant info
505
+
506
+ Older announcements on our mailing list could be harder
507
+ to find.
508
+
509
+ commit 66be289901508d5a6ed092db81ec96815c42d21d
510
+ Author: Eric Wong <normalperson@yhbt.net>
511
+ Date: Mon May 23 18:21:50 2011 +0000
512
+
513
+ GNUmakefile: locale-independent grep invocation
514
+
515
+ Otherwise it could casefold and we don't want that.
516
+
517
+ commit c20077db941cc969fb3721c7527d37a99367f220
518
+ Author: Eric Wong <normalperson@yhbt.net>
519
+ Date: Sun May 8 02:39:42 2011 +0000
520
+
521
+ doc: PHILOSOPHY: formatting fixes
522
+
523
+ No need to list things inside preformatted text
524
+
525
+ commit 77a951c5da518dda471282635c98f3b572ca15db
526
+ Author: Eric Wong <normalperson@yhbt.net>
527
+ Date: Thu May 5 16:42:26 2011 -0700
528
+
529
+ http_parser: add max_header_len accessor
530
+
531
+ Rainbows! wants to be able to lower this eventually...
532
+
533
+ commit 733cb68e444a6f324bb1ffda3839da98ef010c74
534
+ Author: Eric Wong <normalperson@yhbt.net>
535
+ Date: Thu May 5 16:40:42 2011 -0700
536
+
537
+ t0002-parser-error: fix race conditions
538
+
539
+ "wait" needs to be done in the outside shell because
540
+ the subshell could still be exiting when we grep.
541
+
542
+ commit 39ffd5590e4b5d2114215854deec848f849e9e87
543
+ Author: Eric Wong <normalperson@yhbt.net>
544
+ Date: Wed May 4 17:59:48 2011 -0700
545
+
546
+ doc: remove redundant "of" typo
547
+
548
+ commit 1b0ee5826ef146a3e2647c40f3bc929d51d1b442
549
+ Author: Eric Wong <normalperson@yhbt.net>
550
+ Date: Wed May 4 17:04:51 2011 -0700
551
+
552
+ http_parser: new add_parse method
553
+
554
+ Combines the following sequence:
555
+
556
+ http_parser.buf << socket.readpartial(0x4000)
557
+ http_parser.parse
558
+
559
+ Into:
560
+
561
+ http_parser.add_parse(socket.readpartial(0x4000))
562
+
563
+ It was too damn redundant otherwise...
564
+
565
+ commit f81aa02448b615c4d5fc4f6544c53289dae9d2ec
566
+ Author: Eric Wong <normalperson@yhbt.net>
567
+ Date: Wed May 4 16:41:36 2011 -0700
568
+
569
+ return 414 for URI length violations
570
+
571
+ There's an HTTP status code allocated for it in
572
+ <http://www.iana.org/assignments/http-status-codes>, so
573
+ return that instead of 400.
574
+
575
+ commit 3a76dc40dda91a3804276fcc73260bb2a529c034
576
+ Author: Eric Wong <normalperson@yhbt.net>
577
+ Date: Sat Apr 30 11:09:32 2011 -0700
578
+
579
+ Sandbox: update doc for latest Bundler versions
580
+
581
+ Bundler 1.0.x is much improved :)
582
+
583
+ commit f848f632a81cf8ebc977592cbf9a45d84a69f306
584
+ Author: Eric Wong <normalperson@yhbt.net>
585
+ Date: Sat Apr 30 06:34:52 2011 +0000
586
+
587
+ unicorn 3.6.2 - fix Unicorn::OobGC module
588
+
589
+ The optional Unicorn::OobGC module is reimplemented to fix
590
+ breakage that appeared in v3.3.1. There are also minor
591
+ documentation updates, but no code changes as of 3.6.1 for
592
+ non-OobGC users.
593
+
594
+ There is also a v1.1.7 release to fix the same OobGC breakage
595
+ that appeared for 1.1.x users in the v1.1.6 release.
596
+
597
+ commit 1588c299703754e52b9f36219c21e13204734e6c
598
+ Merge: fe47a17 0874125
599
+ Author: Eric Wong <normalperson@yhbt.net>
600
+ Date: Sat Apr 30 06:33:53 2011 +0000
601
+
602
+ Merge commit 'v1.1.7'
603
+
604
+ * commit 'v1.1.7':
605
+ unicorn 1.1.7 - major fixes to minor components
606
+ oob_gc: reimplement to fix breakage and add tests
607
+ exec_cgi: handle Status header in CGI response
608
+ unicorn 1.1.6 - one minor, esoteric bugfix
609
+ close client socket after closing response body
610
+
611
+ commit fe47a179468799bbbb893b339cbb0d4fedf29c2a
612
+ Author: Eric Wong <normalperson@yhbt.net>
613
+ Date: Fri Apr 29 23:31:35 2011 -0700
614
+
615
+ TUNING: more minor doc updates
616
+
617
+ commit 0874125ce56d52cee0f634712e69d1387eadfae1
618
+ Author: Eric Wong <normalperson@yhbt.net>
619
+ Date: Sat Apr 30 04:56:28 2011 +0000
620
+
621
+ unicorn 1.1.7 - major fixes to minor components
622
+
623
+ No changes to the core code, so this release only affects users
624
+ of the Unicorn::OobGC and Unicorn::ExecCGI modules.
625
+ Unicorn::OobGC was totally broken by the fix in the v1.1.6
626
+ release and is now reimplemented. Unicorn::ExecCGI (which
627
+ hardly anybody uses) now returns proper HTTP status codes.
628
+
629
+ commit fe0dd93cd9cb97b46f6cfb4b1e370e38717a93f0
630
+ Author: Eric Wong <normalperson@yhbt.net>
631
+ Date: Fri Apr 29 15:48:35 2011 -0700
632
+
633
+ oob_gc: reimplement to fix breakage and add tests
634
+
635
+ This was broken since v3.3.1[1] and v1.1.6[2] since nginx relies on
636
+ a closed socket (and not Content-Length/Transfer-Encoding) to
637
+ detect a response completion. We have to close the client
638
+ socket before invoking GC to ensure the client sees the response
639
+ in a timely manner.
640
+
641
+ [1] - commit b72a86f66c722d56a6d77ed1d2779ace6ad103ed
642
+ [2] - commit b7a0074284d33352bb9e732c660b29162f34bf0e
643
+
644
+ (cherry picked from commit faeb3223636c39ea8df4017dc9a9d39ac649b26d)
645
+
646
+ Conflicts:
647
+
648
+ examples/big_app_gc.rb
649
+ lib/unicorn/oob_gc.rb
650
+
651
+ commit 02a116c0d94a60a64abf8ad2465132e8194dd62a
652
+ Author: Eric Wong <normalperson@yhbt.net>
653
+ Date: Fri Apr 29 16:01:35 2011 -0700
654
+
655
+ TUNING: document worker_processes tuning
656
+
657
+ It seems people are still confused about it...
658
+
659
+ commit faeb3223636c39ea8df4017dc9a9d39ac649b26d
660
+ Author: Eric Wong <normalperson@yhbt.net>
661
+ Date: Fri Apr 29 15:48:35 2011 -0700
662
+
663
+ oob_gc: reimplement to fix breakage and add tests
664
+
665
+ This was broken since v3.3.1[1] since nginx relies on a closed
666
+ socket (and not Content-Length/Transfer-Encoding) to detect
667
+ a response completion. We have to close the client socket
668
+ before invoking GC to ensure the client sees the response
669
+ in a timely manner.
670
+
671
+ [1] - commit b72a86f66c722d56a6d77ed1d2779ace6ad103ed
672
+
673
+ commit ce4995a4daf1e4da7034dc87fd218a283c405410
674
+ Author: Eric Wong <normalperson@yhbt.net>
675
+ Date: Fri Apr 29 15:30:07 2011 -0700
676
+
677
+ TUNING: original sentence was incomplete
678
+
679
+ commit 843d30120139dc372aca6c1773ac7699b6ee6345
680
+ Author: Eric Wong <normalperson@yhbt.net>
681
+ Date: Fri Apr 29 12:21:38 2011 -0700
682
+
683
+ examples/big_app_gc: fix comment
684
+
685
+ Oops, comments should match the latest code
686
+
687
+ commit d4f70c45029ab1c6aba4bc2d69283ae43e46d9ff
688
+ Author: Eric Wong <normalperson@yhbt.net>
689
+ Date: Fri Apr 29 12:18:59 2011 -0700
690
+
691
+ examples/big_app_gc: update this example
692
+
693
+ OobGC is actually broken with nginx these days since
694
+ we needed to preserve the env for body.close...
695
+
696
+ commit eaf72275e36560e567efc9597d929e02dc2f577d
697
+ Author: Eric Wong <normalperson@yhbt.net>
698
+ Date: Wed Apr 27 13:49:14 2011 -0700
699
+
700
+ configurator: attempt to clarify :tcp_nopush/:tcp_nodelay
701
+
702
+ These options will probably be more important as interest in
703
+ streaming responses in Rails 3.1 develops.
704
+
705
+ I consider the respective defaults for Unicorn (designed to run
706
+ behind nginx) and Rainbows! (designed to run standalone) to be
707
+ the best choices in their respective environments.
708
+
709
+ commit 37c491dcc23d445521229dbe902f02833f2a0f4c
710
+ Author: Eric Wong <normalperson@yhbt.net>
711
+ Date: Wed Apr 27 13:13:24 2011 -0700
712
+
713
+ examples/nginx.conf: clarify proxy_buffering for Rails 3.1
714
+
715
+ I've tested with nginx 1.0.0 and confirmed "proxy_buffering off;"
716
+ can cause Unicorn to block on a slow client reading a
717
+ large response. While there's a potential (client-visible)
718
+ performance improvement with Rails 3.1 streaming responses, it
719
+ can also hurt the server with slow clients.
720
+
721
+ Rainbows! with (ThreadSpawn or ThreadPool) is probably the best
722
+ way to do streaming responses efficiently from all angles (from
723
+ a server, client and programmer time perspective).
724
+
725
+ commit 1b3befbadb99c83c24109f68b719276f0051c7fb
726
+ Author: Eric Wong <normalperson@yhbt.net>
727
+ Date: Tue Apr 26 16:04:19 2011 -0700
728
+
729
+ unicorn 3.6.1 - fix OpenSSL PRNG workaround
730
+
731
+ Our attempt in 3.6.0 to workaround a problem with the OpenSSL
732
+ PRNG actually made the problem worse. This release corrects the
733
+ workaround to properly reseed the OpenSSL PRNG after forking.
734
+
735
+ commit 34f7dbd1b7e087bc8c86029496fd8daa7dc58441
736
+ Author: Eric Wong <normalperson@yhbt.net>
737
+ Date: Tue Apr 26 16:01:31 2011 -0700
738
+
739
+ properly reseed OpenSSL::Random after forking
740
+
741
+ Using the return value of Kernel#srand actually made the
742
+ problem worse. Using the value of Kernel#rand is required
743
+ to actually get a random value to seed the OpenSSL PRNG.
744
+
745
+ Thanks to ghazel for the bug report!
746
+
3
747
  commit 2aabf90ca53b31edef6c2b63006c33374840c816
4
748
  Author: Eric Wong <normalperson@yhbt.net>
5
749
  Date: Thu Apr 21 06:16:27 2011 +0000
@@ -514,6 +1258,17 @@ ChangeLog from http://bogomips.org/unicorn.git (v1.1.5..v3.6.0)
514
1258
 
515
1259
  bogomips.org is slimming down and losing URL weight :)
516
1260
 
1261
+ commit d385bc4f3ed7b783b7414f5d34299bd2bf242fe6
1262
+ Author: Eric Wong <normalperson@yhbt.net>
1263
+ Date: Fri Jan 21 04:01:01 2011 +0000
1264
+
1265
+ exec_cgi: handle Status header in CGI response
1266
+
1267
+ We no longer blindly return 200 if the CGI returned another error
1268
+ code. We also don't want two Status headers in our output since we
1269
+ no longer filter it out.
1270
+ (cherry picked from commit 6cca8e61c66c1c2a8ebe260813fa83e44530a768)
1271
+
517
1272
  commit 6cca8e61c66c1c2a8ebe260813fa83e44530a768
518
1273
  Author: Eric Wong <normalperson@yhbt.net>
519
1274
  Date: Fri Jan 21 04:01:01 2011 +0000
@@ -565,6 +1320,33 @@ ChangeLog from http://bogomips.org/unicorn.git (v1.1.5..v3.6.0)
565
1320
  There is also a new v1.1.6 release for users who do not use
566
1321
  kgio.
567
1322
 
1323
+ commit 3587edb6e88ebe5c24cdde090ba8dd98de493d63
1324
+ Author: Eric Wong <normalperson@yhbt.net>
1325
+ Date: Thu Jan 6 15:40:54 2011 -0800
1326
+
1327
+ unicorn 1.1.6 - one minor, esoteric bugfix
1328
+
1329
+ We now close the client socket after closing the response body.
1330
+ This does not affect most applications that run under Unicorn,
1331
+ in fact, it may not affect any.
1332
+
1333
+ commit b7a0074284d33352bb9e732c660b29162f34bf0e
1334
+ Author: Eric Wong <normalperson@yhbt.net>
1335
+ Date: Wed Jan 5 23:05:05 2011 -0800
1336
+
1337
+ close client socket after closing response body
1338
+
1339
+ Response bodies may capture the block passed to each
1340
+ and save it for body.close, so don't close the socket
1341
+ before we have a chance to call body.close
1342
+
1343
+ (cherry picked from commit b72a86f66c722d56a6d77ed1d2779ace6ad103ed)
1344
+
1345
+ Conflicts:
1346
+
1347
+ lib/unicorn/http_server.rb
1348
+ test/unit/test_response.rb
1349
+
568
1350
  commit b72a86f66c722d56a6d77ed1d2779ace6ad103ed
569
1351
  Author: Eric Wong <normalperson@yhbt.net>
570
1352
  Date: Wed Jan 5 22:39:03 2011 -0800