rainbows 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. data/.document +1 -0
  2. data/.gitignore +1 -0
  3. data/.manifest +46 -18
  4. data/.wrongdoc.yml +8 -0
  5. data/ChangeLog +849 -374
  6. data/Documentation/comparison.haml +26 -21
  7. data/FAQ +6 -0
  8. data/GIT-VERSION-GEN +1 -1
  9. data/GNUmakefile +23 -65
  10. data/LATEST +27 -0
  11. data/NEWS +53 -26
  12. data/README +7 -7
  13. data/Rakefile +1 -98
  14. data/Summary +0 -7
  15. data/TODO +2 -2
  16. data/lib/rainbows/app_pool.rb +2 -1
  17. data/lib/rainbows/base.rb +1 -0
  18. data/lib/rainbows/configurator.rb +9 -0
  19. data/lib/rainbows/const.rb +1 -1
  20. data/lib/rainbows/coolio/client.rb +191 -0
  21. data/lib/rainbows/coolio/core.rb +25 -0
  22. data/lib/rainbows/{rev → coolio}/deferred_chunk_response.rb +3 -2
  23. data/lib/rainbows/{rev → coolio}/deferred_response.rb +3 -3
  24. data/lib/rainbows/coolio/heartbeat.rb +20 -0
  25. data/lib/rainbows/{rev → coolio}/master.rb +2 -3
  26. data/lib/rainbows/{rev → coolio}/sendfile.rb +1 -1
  27. data/lib/rainbows/coolio/server.rb +11 -0
  28. data/lib/rainbows/coolio/thread_client.rb +36 -0
  29. data/lib/rainbows/coolio.rb +45 -0
  30. data/lib/rainbows/coolio_fiber_spawn.rb +26 -0
  31. data/lib/rainbows/coolio_support.rb +9 -0
  32. data/lib/rainbows/coolio_thread_pool/client.rb +8 -0
  33. data/lib/rainbows/coolio_thread_pool/watcher.rb +14 -0
  34. data/lib/rainbows/coolio_thread_pool.rb +57 -0
  35. data/lib/rainbows/coolio_thread_spawn/client.rb +8 -0
  36. data/lib/rainbows/coolio_thread_spawn.rb +27 -0
  37. data/lib/rainbows/dev_fd_response.rb +6 -2
  38. data/lib/rainbows/ev_core/cap_input.rb +3 -2
  39. data/lib/rainbows/ev_core.rb +13 -3
  40. data/lib/rainbows/event_machine/client.rb +124 -0
  41. data/lib/rainbows/event_machine/response_pipe.rb +1 -2
  42. data/lib/rainbows/event_machine/server.rb +15 -0
  43. data/lib/rainbows/event_machine.rb +13 -137
  44. data/lib/rainbows/fiber/base.rb +6 -7
  45. data/lib/rainbows/fiber/body.rb +4 -2
  46. data/lib/rainbows/fiber/coolio/heartbeat.rb +15 -0
  47. data/lib/rainbows/fiber/{rev → coolio}/methods.rb +4 -5
  48. data/lib/rainbows/fiber/{rev → coolio}/server.rb +1 -1
  49. data/lib/rainbows/fiber/{rev → coolio}/sleeper.rb +2 -2
  50. data/lib/rainbows/fiber/coolio.rb +12 -0
  51. data/lib/rainbows/fiber/io/methods.rb +6 -0
  52. data/lib/rainbows/fiber/io.rb +8 -10
  53. data/lib/rainbows/fiber/queue.rb +24 -30
  54. data/lib/rainbows/fiber.rb +7 -4
  55. data/lib/rainbows/fiber_pool.rb +1 -1
  56. data/lib/rainbows/http_server.rb +9 -2
  57. data/lib/rainbows/max_body.rb +3 -1
  58. data/lib/rainbows/never_block/core.rb +15 -0
  59. data/lib/rainbows/never_block/event_machine.rb +8 -3
  60. data/lib/rainbows/never_block.rb +37 -70
  61. data/lib/rainbows/process_client.rb +3 -6
  62. data/lib/rainbows/rack_input.rb +17 -0
  63. data/lib/rainbows/response/body.rb +18 -19
  64. data/lib/rainbows/response.rb +1 -1
  65. data/lib/rainbows/rev.rb +21 -43
  66. data/lib/rainbows/rev_fiber_spawn.rb +4 -19
  67. data/lib/rainbows/rev_thread_pool.rb +21 -75
  68. data/lib/rainbows/rev_thread_spawn.rb +18 -36
  69. data/lib/rainbows/revactor/body.rb +4 -1
  70. data/lib/rainbows/revactor/tee_socket.rb +44 -0
  71. data/lib/rainbows/revactor.rb +13 -48
  72. data/lib/rainbows/socket_proxy.rb +24 -0
  73. data/lib/rainbows/sync_close.rb +37 -0
  74. data/lib/rainbows/thread_pool.rb +66 -70
  75. data/lib/rainbows/thread_spawn.rb +40 -50
  76. data/lib/rainbows/thread_timeout.rb +33 -27
  77. data/lib/rainbows/timed_read.rb +5 -1
  78. data/lib/rainbows/worker_yield.rb +16 -0
  79. data/lib/rainbows/writer_thread_pool/client.rb +19 -0
  80. data/lib/rainbows/writer_thread_pool.rb +60 -91
  81. data/lib/rainbows/writer_thread_spawn/client.rb +69 -0
  82. data/lib/rainbows/writer_thread_spawn.rb +37 -117
  83. data/lib/rainbows.rb +12 -4
  84. data/rainbows.gemspec +15 -19
  85. data/t/GNUmakefile +4 -4
  86. data/t/close-has-env.ru +65 -0
  87. data/t/simple-http_Coolio.ru +9 -0
  88. data/t/simple-http_CoolioFiberSpawn.ru +10 -0
  89. data/t/simple-http_CoolioThreadPool.ru +9 -0
  90. data/t/simple-http_CoolioThreadSpawn.ru +9 -0
  91. data/t/t0004-heartbeat-timeout.sh +2 -2
  92. data/t/t0007-worker-follows-master-to-death.sh +1 -1
  93. data/t/t0015-working_directory.sh +7 -1
  94. data/t/t0017-keepalive-timeout-zero.sh +1 -1
  95. data/t/t0019-keepalive-cpu-usage.sh +62 -0
  96. data/t/t0040-keepalive_requests-setting.sh +51 -0
  97. data/t/t0050-response-body-close-has-env.sh +109 -0
  98. data/t/t0102-rack-input-short.sh +6 -6
  99. data/t/t0106-rack-input-keepalive.sh +48 -2
  100. data/t/t0113-rewindable-input-false.sh +28 -0
  101. data/t/t0113.ru +12 -0
  102. data/t/t0114-rewindable-input-true.sh +28 -0
  103. data/t/t0114.ru +12 -0
  104. data/t/t9100-thread-timeout.sh +24 -2
  105. data/t/t9101-thread-timeout-threshold.sh +6 -13
  106. data/t/test-lib.sh +2 -1
  107. data/t/test_isolate.rb +9 -4
  108. data/t/times.ru +6 -0
  109. metadata +109 -42
  110. data/GIT-VERSION-FILE +0 -1
  111. data/lib/rainbows/fiber/rev/heartbeat.rb +0 -8
  112. data/lib/rainbows/fiber/rev/kato.rb +0 -22
  113. data/lib/rainbows/fiber/rev.rb +0 -13
  114. data/lib/rainbows/rev/client.rb +0 -194
  115. data/lib/rainbows/rev/core.rb +0 -41
  116. data/lib/rainbows/rev/heartbeat.rb +0 -23
  117. data/lib/rainbows/rev/thread.rb +0 -46
  118. data/man/man1/rainbows.1 +0 -193
@@ -1,3 +1,8 @@
1
+ %h1 Rainbows! at a glance
2
+ %p
3
+ Confused by all the options we give you? So are we! Here's some tables
4
+ to help keep your head straight. Remember, engineering is all about
5
+ trade-offs.
1
6
  %h2 core features and compatibility
2
7
  %br
3
8
  %table.comp
@@ -30,7 +35,7 @@
30
35
  %td.rbx Yes
31
36
  %td.slow OK
32
37
  %tr.comp_row
33
- %td.mod Rev
38
+ %td.mod Coolio
34
39
  %td.tee No
35
40
  %td.r18 Yes
36
41
  %td.r19 Yes
@@ -51,9 +56,9 @@
51
56
  %td.rbx No
52
57
  %td.slow Yes
53
58
  %tr.comp_row
54
- %td.mod RevThreadSpawn
59
+ %td.mod CoolioThreadSpawn
55
60
  %td.tee No
56
- %td.r18 Yes
61
+ %td.r18 No
57
62
  %td.r19 Yes
58
63
  %td.rbx No
59
64
  %td.slow Yes
@@ -86,14 +91,14 @@
86
91
  %td.rbx No
87
92
  %td.slow Yes
88
93
  %tr.comp_row
89
- %td.mod RevThreadPool
94
+ %td.mod CoolioThreadPool
90
95
  %td.tee No
91
96
  %td.r18 Yes
92
97
  %td.r19 No
93
98
  %td.rbx No
94
99
  %td.slow Yes
95
100
  %tr.comp_row
96
- %td.mod RevFiberSpawn
101
+ %td.mod CoolioFiberSpawn
97
102
  %td.tee Yes
98
103
  %td.r18 No
99
104
  %td.r19 Yes
@@ -115,9 +120,9 @@
115
120
  %td.slow no
116
121
  %ul
117
122
  %li
118
- RevThread* + 1.8 requires Rev >= 0.3.2 for reasonable performance
123
+ Cool.io should also work with Rubinius (though we haven't had time to test).
119
124
  %li
120
- waiting on Rubinius for better signal handling
125
+ CoolioThread* and CoolioThread* requires Ruby 1.9 reasonable performance
121
126
  %li
122
127
  rack.input streaming is what makes
123
128
  %a(href="http://upr.bogomips.org/") upload progress,
@@ -144,7 +149,7 @@
144
149
  %tr.comp_row
145
150
  %td.mod Revactor
146
151
  %td.slowio
147
- %a(href="http://rev.rubyforge.org/")Rev,
152
+ %a(href="http://coolio.github.com/")Coolio,
148
153
  %a(href="http://revactor.org/")Revactor,
149
154
  %b
150
155
  not
@@ -157,9 +162,9 @@
157
162
  %td.thr Yes
158
163
  %td.reent No
159
164
  %tr.comp_row
160
- %td.mod Rev
165
+ %td.mod Coolio
161
166
  %td.slowio
162
- %a(href="http://rev.rubyforge.org/") Rev
167
+ %a(href="http://coolio.github.com/") Coolio
163
168
  %td.thr No
164
169
  %td.reent No
165
170
  %tr.comp_row
@@ -174,10 +179,10 @@
174
179
  %td.thr No
175
180
  %td.reent No
176
181
  %tr.comp_row
177
- %td.mod RevThreadSpawn
182
+ %td.mod CoolioThreadSpawn
178
183
  %td.slowio
179
184
  thread-safe Ruby,
180
- %a(href="http://rev.rubyforge.org/") Rev
185
+ %a(href="http://coolio.github.com/") Coolio
181
186
  %td.thr Yes
182
187
  %td.reent No
183
188
  %tr.comp_row
@@ -205,14 +210,14 @@
205
210
  %td.thr No
206
211
  %td.reent Yes
207
212
  %tr.comp_row
208
- %td.mod RevThreadPool
213
+ %td.mod CoolioThreadPool
209
214
  %td.slowio
210
215
  thread-safe Ruby,
211
- %a(href="http://rev.rubyforge.org/") Rev
216
+ %a(href="http://coolio.github.com/") Coolio
212
217
  %td.thr Yes
213
218
  %td.reent No
214
219
  %tr.comp_row
215
- %td.mod RevFiberSpawn
220
+ %td.mod CoolioFiberSpawn
216
221
  %td.slowio
217
222
  %a(href="Rainbows/Fiber/IO.html") Rainbows::Fiber::IO
218
223
  %td.thr No
@@ -282,7 +287,7 @@
282
287
  %td.async standard Ruby
283
288
  %td.ws Sunshowers
284
289
  %tr.comp_row
285
- %td.mod Rev
290
+ %td.mod Coolio
286
291
  %td.devfd Yes
287
292
  %td.app_pool no-op
288
293
  %td.lock no-op
@@ -303,7 +308,7 @@
303
308
  %td.async async_sinatra, Cramp, rack-fiber_pool
304
309
  %td.ws no
305
310
  %tr.comp_row
306
- %td.mod RevThreadSpawn
311
+ %td.mod CoolioThreadSpawn
307
312
  %td.devfd Yes
308
313
  %td.app_pool Yes
309
314
  %td.lock Dumb
@@ -338,18 +343,18 @@
338
343
  %td.async NeverBlock, async_sinatra
339
344
  %td.ws no
340
345
  %tr.comp_row
341
- %td.mod RevThreadPool
346
+ %td.mod CoolioThreadPool
342
347
  %td.devfd Yes
343
348
  %td.app_pool Yes
344
349
  %td.lock Dumb
345
- %td.async Rev, standard Ruby
350
+ %td.async Coolio, standard Ruby
346
351
  %td.ws no
347
352
  %tr.comp_row
348
- %td.mod RevFiberSpawn
353
+ %td.mod CoolioFiberSpawn
349
354
  %td.devfd Yes
350
355
  %td.app_pool Yes
351
356
  %td.lock No!
352
- %td.async Rev, Rainbows::Fiber::IO, Rainbows.sleep
357
+ %td.async Coolio, Rainbows::Fiber::IO, Rainbows.sleep
353
358
  %tr.comp_row
354
359
  %td.mod WriterThreadPool
355
360
  %td.devfd Yes
data/FAQ CHANGED
@@ -98,3 +98,9 @@ For older versions of Rails, the following config.ru will work:
98
98
 
99
99
  One thing to watch out for is that RAILS_ENV will not be set in the
100
100
  environment for you, thus we set it to match RACK_ENV.
101
+
102
+ === I'm using threads and Rails is misbehaving!
103
+
104
+ If you use any of the threaded concurrency models, you will need to use
105
+ {config.threadsafe!}[http://m.onkey.org/thread-safety-for-your-rails]
106
+ in your config/environments/$RAILS_ENV.rb
data/GIT-VERSION-GEN CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
 
3
3
  GVF=GIT-VERSION-FILE
4
- DEF_VER=v2.0.1.GIT
4
+ DEF_VER=v2.1.0.GIT
5
5
 
6
6
  LF='
7
7
  '
data/GNUmakefile CHANGED
@@ -4,7 +4,6 @@ MRI = ruby
4
4
  RUBY = ruby
5
5
  RAKE = rake
6
6
  RSYNC = rsync
7
- GIT_URL = git://git.bogomips.org/rainbows.git
8
7
 
9
8
  GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
10
9
  @./GIT-VERSION-GEN
@@ -43,80 +42,39 @@ clean:
43
42
  -$(MAKE) -C Documentation clean
44
43
  $(RM) $(setup_rb_files) $(t_log)
45
44
 
46
- man:
47
- $(MAKE) -C Documentation install-man
45
+ man html:
46
+ $(MAKE) -C Documentation install-$@
48
47
 
49
- pkg_extra := GIT-VERSION-FILE NEWS ChangeLog
50
- manifest: $(pkg_extra) man
51
- $(RM) .manifest
48
+ ChangeLog: GIT-VERSION-FILE .wrongdoc.yml
49
+ wrongdoc prepare
50
+
51
+ manifest: ChangeLog GIT-VERSION-FILE
52
+ $(RM) -f .manifest
52
53
  $(MAKE) .manifest
53
54
 
54
55
  .manifest:
55
- (git ls-files && \
56
- for i in $@ $(pkg_extra) $(man1_paths); \
57
- do echo $$i; done) | LC_ALL=C sort > $@+
56
+ (git ls-files && for i in $@ $(pkg_extra) ; do echo $$i; done) | \
57
+ LC_ALL=C sort > $@+
58
58
  cmp $@+ $@ || mv $@+ $@
59
59
  $(RM) $@+
60
60
 
61
- NEWS: GIT-VERSION-FILE
62
- $(RAKE) -s news_rdoc > $@+
63
- mv $@+ $@
64
-
65
- SINCE = 0.97.0
66
- ChangeLog: LOG_VERSION = \
67
- $(shell git rev-parse -q "$(GIT_VERSION)" >/dev/null 2>&1 && \
68
- echo $(GIT_VERSION) || git describe)
69
- ChangeLog: log_range = v$(SINCE)..$(LOG_VERSION)
70
- ChangeLog: GIT-VERSION-FILE
71
- @echo "ChangeLog from $(GIT_URL) ($(log_range))" > $@+
72
- @echo >> $@+
73
- git log $(log_range) | sed -e 's/^/ /' >> $@+
74
- mv $@+ $@
75
-
76
- news_atom := http://rainbows.rubyforge.org/NEWS.atom.xml
77
- cgit_atom := http://git.bogomips.org/cgit/rainbows.git/atom/?h=master
78
- atom = <link rel="alternate" title="Atom feed" href="$(1)" \
79
- type="application/atom+xml"/>
80
-
81
- # using rdoc 2.5.x+
82
- doc: .document NEWS ChangeLog
61
+ doc: .document man html .wrongdoc.yml
62
+ $(MAKE) -C Documentation comparison.html
83
63
  for i in $(man1_rdoc); do echo > $$i; done
84
64
  find bin lib -type f -name '*.rbc' -exec rm -f '{}' ';'
85
- rdoc -t "$(shell sed -ne '1s/^= //p' README)"
65
+ $(RM) -r doc
66
+ wrongdoc all
86
67
  install -m644 COPYING doc/COPYING
87
- install -m644 $(shell grep '^[A-Z]' .document) doc/
88
- $(MAKE) -C Documentation install-html install-man
68
+ install -m644 $(shell grep '^[A-Z]' .document) doc/
89
69
  install -m644 $(man1_paths) doc/
90
- cd doc && for i in $(base_bins); do \
91
- $(RM) 1.html $${i}.1.html; \
92
- sed -e '/"documentation">/r man1/'$$i'.1.html' \
93
- < $${i}_1.html > tmp && mv tmp $${i}_1.html; \
94
- ln $${i}_1.html $${i}.1.html; \
95
- done
96
- $(MRI) -i -p -e \
97
- '$$_.gsub!("</title>",%q{\&$(call atom,$(cgit_atom))})' \
98
- doc/ChangeLog.html
99
- $(MRI) -i -p -e \
100
- '$$_.gsub!("</title>",%q{\&$(call atom,$(news_atom))})' \
101
- doc/NEWS.html doc/README.html
102
- $(RAKE) -s news_atom > doc/NEWS.atom.xml
103
- cd doc && ln README.html tmp && mv tmp index.html
104
- $(MAKE) -C Documentation comparison.html
105
- $(MRI) -i -p -e \
106
- '$$_.gsub!(/INCLUDE/){File.read("Documentation/comparison.html")}' \
107
- doc/Summary.html
108
70
  cat Documentation/comparison.css >> doc/rdoc.css
109
71
  $(RM) $(man1_rdoc)
110
72
 
111
- # publishes docs to http://rainbows.rubyforge.org
112
- publish_doc: NEWS
73
+ publish_doc:
113
74
  -git set-file-times
114
- $(RM) -r doc ChangeLog NEWS
115
- $(MAKE) doc LOG_VERSION=$(shell git tag -l | tail -1)
116
- awk 'BEGIN{RS="=== ";ORS=""}NR==2{sub(/\n$$/,"");print RS""$$0 }' \
117
- < NEWS > doc/LATEST
118
- -find doc/images doc/js -type f | \
119
- TZ=UTC xargs touch -d '1970-01-01 00:00:01' doc/rdoc.css
75
+ $(MAKE) doc
76
+ -find doc/images -type f | \
77
+ TZ=UTC xargs touch -d '1970-01-01 00:00:02' doc/rdoc.css
120
78
  chmod 644 $$(find doc -type f)
121
79
  $(RSYNC) -av doc/ rubyforge.org:/var/www/gforge-projects/rainbows/
122
80
  git ls-files | xargs touch
@@ -132,10 +90,10 @@ release_changes := release_changes-$(VERSION)
132
90
  release-notes: $(release_notes)
133
91
  release-changes: $(release_changes)
134
92
  $(release_changes):
135
- $(RAKE) -s release_changes > $@+
93
+ wrongdoc release_changes > $@+
136
94
  $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
137
95
  $(release_notes):
138
- GIT_URL=$(GIT_URL) $(RAKE) -s release_notes > $@+
96
+ wrongdoc release_notes > $@+
139
97
  $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
140
98
 
141
99
  # ensures we're actually on the tagged $(VERSION), only used for release
@@ -166,8 +124,8 @@ $(pkgtgz): manifest fix-perms
166
124
  @test -n "$(distdir)"
167
125
  $(RM) -r $(distdir)
168
126
  mkdir -p $(distdir)
169
- tar c `cat .manifest` | (cd $(distdir) && tar x)
170
- cd pkg && tar c $(basename $(@F)) | gzip -9 > $(@F)+
127
+ tar cf - $$(cat .manifest) | (cd $(distdir) && tar xf -)
128
+ cd pkg && tar cf - $(basename $(@F)) | gzip -9 > $(@F)+
171
129
  mv $@+ $@
172
130
 
173
131
  package: $(pkgtgz) $(pkggem)
@@ -193,4 +151,4 @@ all:: test
193
151
  test:
194
152
  $(MAKE) -C t
195
153
 
196
- .PHONY: .FORCE-GIT-VERSION-FILE doc manifest man test
154
+ .PHONY: .FORCE-GIT-VERSION-FILE doc manifest man test html
data/LATEST ADDED
@@ -0,0 +1,27 @@
1
+ === Rainbows! 2.1.0 - Cool.io, bugfixes and more! /
2
+
3
+ Cool.io (new version of Rev) support is explicitly added
4
+ (it always worked before). ":Coolio" may be used in place
5
+ of ":Rev" anywhere in your Rainbows! config file.
6
+
7
+ There is a new "keepalive_requests" config directive to limit
8
+ the number of requests a single connection may make (default:
9
+ 100, same as nginx). This may be useful for better
10
+ load-balancing characteristics.
11
+
12
+ The old "Rev" prefixes remain supported as long as Cool.io
13
+ remains compatible with Rev (likely forever).
14
+
15
+ Bug fixes:
16
+
17
+ * Rainbows::ThreadTimeout middleware with multiple clients
18
+ * large, pipelined upload errors with Revactor+Coolio(Rev)
19
+ * high CPU usage for maintaining idle keepalive on *Fiber*
20
+ * needless ThreadPool wakeups
21
+ * request env prematurely cleared keepalive requests,
22
+ breaking some middlewares such as Clogger.
23
+ * "close" not called on body if wrapper and sendfile used together
24
+
25
+ Various code cleanups, and our RDoc website is JavaScript-free.
26
+ See the ChangeLog or git for all changes.
27
+
data/NEWS CHANGED
@@ -1,10 +1,37 @@
1
- === 2.0.1 / 2010-12-03 01:26 UTC
1
+ === Rainbows! 2.1.0 - Cool.io, bugfixes and more! / 2010-12-29 02:18 UTC
2
+
3
+ Cool.io (new version of Rev) support is explicitly added
4
+ (it always worked before). ":Coolio" may be used in place
5
+ of ":Rev" anywhere in your Rainbows! config file.
6
+
7
+ There is a new "keepalive_requests" config directive to limit
8
+ the number of requests a single connection may make (default:
9
+ 100, same as nginx). This may be useful for better
10
+ load-balancing characteristics.
11
+
12
+ The old "Rev" prefixes remain supported as long as Cool.io
13
+ remains compatible with Rev (likely forever).
14
+
15
+ Bug fixes:
16
+
17
+ * Rainbows::ThreadTimeout middleware with multiple clients
18
+ * large, pipelined upload errors with Revactor+Coolio(Rev)
19
+ * high CPU usage for maintaining idle keepalive on *Fiber*
20
+ * needless ThreadPool wakeups
21
+ * request env prematurely cleared keepalive requests,
22
+ breaking some middlewares such as Clogger.
23
+ * "close" not called on body if wrapper and sendfile used together
24
+
25
+ Various code cleanups, and our RDoc website is JavaScript-free.
26
+ See the ChangeLog or git for all changes.
27
+
28
+ === Rainbows! 2.0.1 - upload pipelining fixes / 2010-12-03 01:26 UTC
2
29
 
3
30
  For HTTP clients living on the edge and pipelining uploads, we
4
31
  now fully support pipelined requests (as long as the application
5
32
  consumes each request in its entirety).
6
33
 
7
- === 2.0.0 / 2010-11-20 03:10 UTC
34
+ === Rainbows! 2.0.0 - minority rules! / 2010-11-20 03:10 UTC
8
35
 
9
36
  This release is targeted at the minority of web applications
10
37
  that deal heavily with uploads.
@@ -19,7 +46,7 @@
19
46
 
20
47
  http://rainbows.rubyforge.org/Rainbows/MaxBody.html
21
48
 
22
- === 1.0.0 / 2010-10-28 09:01 UTC
49
+ === Rainbows! 1.0.0 - internal cleanups / 2010-10-28 09:01 UTC
23
50
 
24
51
  This release is merely a milestone in our evolving internal API.
25
52
  Use of kgio may result in performance improvements under Ruby
@@ -29,7 +56,7 @@
29
56
  unset settings. A similar fix is included in Unicorn 2.0.0
30
57
  as well.
31
58
 
32
- === 1.0.0pre1 / 2010-10-26 21:33 UTC
59
+ === Rainbows! 1.0.0pre1 - kinder, gentler I/O / 2010-10-26 21:33 UTC
33
60
 
34
61
  Mostly internal changes for kgio (and Unicorn) integration.
35
62
  There should be no (supported) user-visible changes from
@@ -37,7 +64,7 @@
37
64
  concurrency models that use non-blocking I/O internally,
38
65
  especially under Ruby 1.9.2
39
66
 
40
- === 0.97.0 / 2010-08-28 19:46 UTC
67
+ === Rainbows! 0.97.0 / 2010-08-28 19:46 UTC
41
68
 
42
69
  We now depend on Unicorn 1.1.3 to avoid race conditions during
43
70
  log cycling. This bug mainly affected folks using Rainbows! as
@@ -55,7 +82,7 @@
55
82
 
56
83
  See the commits in git for all the details.
57
84
 
58
- === 0.96.0 / 2010-08-03 09:04 UTC
85
+ === Rainbows! 0.96.0 - range support / 2010-08-03 09:04 UTC
59
86
 
60
87
  For concurrency models that use sendfile or IO.copy_stream, HTTP
61
88
  Range requests are honored when serving static files. Due to
@@ -99,14 +126,14 @@
99
126
 
100
127
  See the full git logs for a list of all changes.
101
128
 
102
- === 0.95.1 / 2010-07-11 02:53 UTC
129
+ === Rainbows! v0.95.1 - depend on newer Unicorn / 2010-07-11 02:53 UTC
103
130
 
104
131
  Eric Wong (3):
105
132
  test_isolate: document why we test with Rack 1.1.0
106
133
  doc: make RDoc skip private methods
107
134
  bump Unicorn dependency to 1.1.1
108
135
 
109
- === 0.95.0 / 2010-07-10 08:45 UTC
136
+ === Rainbows! 0.95.0 - sendfile() support! / 2010-07-10 08:45 UTC
110
137
 
111
138
  In addition to the 1.9-only IO.copy_stream, the new sendfile
112
139
  1.0.0 gem may optionally be used with most concurrency models
@@ -124,7 +151,7 @@
124
151
  * numerous internal cleanups, small bugfixes and speedups
125
152
  * more concise website oriented at users
126
153
 
127
- === 0.94.0 / 2010-06-04 08:42 UTC
154
+ === Rainbows! 0.94.0 - one eight ate my homework! / 2010-06-04 08:42 UTC
128
155
 
129
156
  This release fixes corrupted large response bodies for Ruby 1.8
130
157
  users with the WriterThreadSpawn and WriterThreadPool models
@@ -145,7 +172,7 @@
145
172
  completely forgot to tell RDoc about it. Personally, this
146
173
  test suite is one of my favorite parts of the project.
147
174
 
148
- === 0.93.0 / 2010-05-29 06:20 UTC
175
+ === Rainbows! 0.93.0 - MOAR!!!1 / 2010-05-29 06:20 UTC
149
176
 
150
177
  In our race to have more concurrency options than real sites
151
178
  using this server, we've added two new and fully supported
@@ -167,7 +194,7 @@
167
194
  applications. But nothing is too dangerous for Rainbows! So
168
195
  here they are now for your experimentation.
169
196
 
170
- === 0.92.0 / 2010-05-04 21:58 UTC
197
+ === Rainbows! 0.92.0 - inching towards the pot of gold / 2010-05-04 21:58 UTC
171
198
 
172
199
  Mostly internal cleanups and small improvements.
173
200
 
@@ -196,7 +223,7 @@
196
223
  [2] - http://eventmachine.rubyforge.org/EventMachine/Connection.html#M000312
197
224
  [3] - http://brainspl.at/articles/2008/04/18/deferred-requests-with-merb-ebb-and-thin
198
225
 
199
- === 0.91.1 / 2010-04-19 21:13 UTC
226
+ === Rainbows! 0.91.1 - use a less-broken parser from Unicorn / 2010-04-19 21:13 UTC
200
227
 
201
228
  This release fixes a denial-of-service vector for deployments
202
229
  exposed directly to untrusted clients.
@@ -223,7 +250,7 @@
223
250
  This bug affects all previously released versions of Rainbows!
224
251
  and Zbatery.
225
252
 
226
- === 0.91.0 / 2010-03-01 10:03 UTC
253
+ === Rainbows! 0.91.0 - Unicorn resync / 2010-03-01 10:03 UTC
227
254
 
228
255
  Unicorn 0.97.0 has a bunch of internal cleanups and small fixes
229
256
  and this is mainly to resync with those changes.
@@ -239,7 +266,7 @@
239
266
  * quiet down ENOTCONN handling, there's nothing we can do about
240
267
  this error so we won't fill our logs with it.
241
268
 
242
- === 0.90.2 / 2010-02-13 09:11 UTC
269
+ === Rainbows! 0.90.2 / 2010-02-13 09:11 UTC
243
270
 
244
271
  This release depends on Unicorn 0.96.1 for an updated
245
272
  Unicorn::HttpParser to avoid leaking memory.
@@ -266,7 +293,7 @@
266
293
  gemspec: bump dependency on Unicorn to avoid leak
267
294
  Rainbows! 0.90.2
268
295
 
269
- === 0.90.1 / 2009-12-30 10:24 UTC
296
+ === Rainbows! 0.90.1 / 2009-12-30 10:24 UTC
270
297
 
271
298
  This release contains minor bugfixes/compatibility improvements
272
299
  for ThreadSpawn, ThreadPool and EventMachine users.
@@ -279,7 +306,7 @@
279
306
  responses, vastly improving compatibility with existing
280
307
  async_sinatra apps.
281
308
 
282
- === 0.90.0 / 2009-12-22 21:54 UTC
309
+ === Rainbows! 0.90.0 / 2009-12-22 21:54 UTC
283
310
 
284
311
  This release should fix ThreadSpawn green thread blocking issues
285
312
  under MRI 1.8. Excessive socket closing is avoided when using
@@ -289,7 +316,7 @@
289
316
  There is a new RevFiberSpawn concurrency model which combines
290
317
  Rev with the traditional FiberSpawn model.
291
318
 
292
- === 0.9.0 / 2009-12-13 22:51 UTC
319
+ === Rainbows! 0.9.0 / 2009-12-13 22:51 UTC
293
320
 
294
321
  This release introduces compatibility with Sunshowers, a library
295
322
  for Web Sockets, see http://rainbows.rubyforge.org/sunshowers
@@ -317,13 +344,13 @@
317
344
  doc/comparison: add Web Sockets to comparison
318
345
  README updates
319
346
 
320
- === 0.8.0 / 2009-12-02 08:55 UTC
347
+ === Rainbows! 0.8.0 / 2009-12-02 08:55 UTC
321
348
 
322
349
  This release fixes a memory leak in our existing Revactor
323
350
  concurrency model. A new RevThreadPool concurrency model has
324
351
  been added as well as small cleaups to exit handling in workers.
325
352
 
326
- === 0.7.0 / 2009-11-30 04:21 UTC
353
+ === Rainbows! 0.7.0 / 2009-11-30 04:21 UTC
327
354
 
328
355
  keepalive_timeout (default: 2 seconds) is now supported to
329
356
  disconnect idle connections. Several new concurrency models
@@ -342,7 +369,7 @@
342
369
  RevThreadSpawn should become usable under MRI 1.8 with the next
343
370
  release of Rev (0.3.2).
344
371
 
345
- === 0.6.0 / 2009-11-15 23:29 UTC
372
+ === Rainbows! 0.6.0 - bugfixes galore / 2009-11-15 23:29 UTC
346
373
 
347
374
  Client shutdowns/errors when streaming "rack.input" into the
348
375
  Rack application are quieter now. Rev and EventMachine workers
@@ -385,7 +412,7 @@
385
412
  Revert "Threaded models have trouble with late loading under 1.9"
386
413
  Rakefile: add raa_update task
387
414
 
388
- === 0.5.0 / 2009-11-05 10:27 UTC
415
+ === Rainbows! 0.5.0 / 2009-11-05 10:27 UTC
389
416
 
390
417
  We depend on the just-released Unicorn 0.94.0 for the fixed
391
418
  trailer handling. As with `unicorn', the `rainbows' executable
@@ -415,7 +442,7 @@
415
442
  ensure RACK_ENV is inherited from the parent env
416
443
  t0100: more precise `expr` usage
417
444
 
418
- === 0.4.0 / 2009-10-27 08:44 UTC
445
+ === Rainbows! 0.4.0 / 2009-10-27 08:44 UTC
419
446
 
420
447
  Basic single-threaded EventMachine support is now included. It
421
448
  supports async_synatra[1] via the "async.callback" Rack
@@ -486,7 +513,7 @@
486
513
  slide since there are already folks depending on
487
514
  the async_sinatra gem
488
515
 
489
- === 0.3.0 / 2009-10-19 18:21 UTC
516
+ === Rainbows! 0.3.0 / 2009-10-19 18:21 UTC
490
517
 
491
518
  The major feature of this release is the new DeferredResponse
492
519
  middleware for the Rev-based concurrency model. It should be
@@ -539,7 +566,7 @@
539
566
  local.mk.sample: sync with BDFL's version
540
567
  Rainbows! 0.3.0
541
568
 
542
- === 0.2.0 / 2009-10-15 08:01 UTC
569
+ === Rainbows! 0.2.0 / 2009-10-15 08:01 UTC
543
570
 
544
571
  This release adds preliminary Rev support for network
545
572
  concurrency under Ruby 1.8 and Ruby 1.9. There are caveats to
@@ -624,7 +651,7 @@
624
651
  README: link to AppPool and extra note about Rev model
625
652
  Rainbows! 0.2.0
626
653
 
627
- === 0.1.1 / 2009-10-06 03:51 UTC
654
+ === Rainbows! v0.1.1 / 2009-10-06 03:51 UTC
628
655
 
629
656
  Fixed Ruby 1.8 support (and all 1.9 systems without Revactor).
630
657
  Process-wide timeout handling for the ThreadSpawn concurrency
@@ -648,7 +675,7 @@
648
675
  thread_spawn: fix timeout leading to worker death
649
676
  less error-prone timeouts for Thread models
650
677
 
651
- === 0.1.0 / 2009-10-05 10:44 UTC
678
+ === Rainbows! 0.1.0 / 2009-10-05 10:44 UTC
652
679
 
653
680
  Initial release
654
681
 
data/README CHANGED
@@ -21,19 +21,19 @@ suck; differently.
21
21
 
22
22
  For network concurrency, models we currently support are:
23
23
 
24
- * {RevFiberSpawn}[link:Rainbows/RevFiberSpawn.html]
25
- * {Revactor}[link:Rainbows/Revactor.html]
26
- * {ThreadPool}[link:Rainbows/ThreadPool.html]
27
- * {Rev}[link:Rainbows/Rev.html]
28
- * {ThreadSpawn}[link:Rainbows/ThreadSpawn.html]
24
+ * {Coolio}[link:Rainbows/Coolio.html]
29
25
  * {EventMachine}[link:Rainbows/EventMachine.html]
30
- * {RevThreadSpawn}[link:Rainbows/RevThreadSpawn.html]
31
26
  * {FiberSpawn}[link:Rainbows/FiberSpawn.html]
32
27
  * {FiberPool}[link:Rainbows/FiberPool.html]
33
28
  * {NeverBlock}[link:Rainbows/NeverBlock.html]
34
- * {RevThreadPool}[link:Rainbows/RevThreadPool.html]
29
+ * {Revactor}[link:Rainbows/Revactor.html]
30
+ * {ThreadPool}[link:Rainbows/ThreadPool.html]
31
+ * {ThreadSpawn}[link:Rainbows/ThreadSpawn.html]
35
32
  * {WriterThreadPool}[link:Rainbows/WriterThreadPool.html]
36
33
  * {WriterThreadSpawn}[link:Rainbows/WriterThreadSpawn.html]
34
+ * {CoolioFiberSpawn}[link:Rainbows/CoolioFiberSpawn.html]
35
+ * {CoolioThreadPool}[link:Rainbows/CoolioThreadPool.html]
36
+ * {CoolioThreadSpawn}[link:Rainbows/CoolioThreadSpawn.html]
37
37
 
38
38
  We have {many more on the way}[link:TODO.html] for handling network
39
39
  concurrency. Additionally, we also use multiple processes (managed by