rainbows 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +1 -0
- data/.gitignore +1 -0
- data/.manifest +46 -18
- data/.wrongdoc.yml +8 -0
- data/ChangeLog +849 -374
- data/Documentation/comparison.haml +26 -21
- data/FAQ +6 -0
- data/GIT-VERSION-GEN +1 -1
- data/GNUmakefile +23 -65
- data/LATEST +27 -0
- data/NEWS +53 -26
- data/README +7 -7
- data/Rakefile +1 -98
- data/Summary +0 -7
- data/TODO +2 -2
- data/lib/rainbows/app_pool.rb +2 -1
- data/lib/rainbows/base.rb +1 -0
- data/lib/rainbows/configurator.rb +9 -0
- data/lib/rainbows/const.rb +1 -1
- data/lib/rainbows/coolio/client.rb +191 -0
- data/lib/rainbows/coolio/core.rb +25 -0
- data/lib/rainbows/{rev → coolio}/deferred_chunk_response.rb +3 -2
- data/lib/rainbows/{rev → coolio}/deferred_response.rb +3 -3
- data/lib/rainbows/coolio/heartbeat.rb +20 -0
- data/lib/rainbows/{rev → coolio}/master.rb +2 -3
- data/lib/rainbows/{rev → coolio}/sendfile.rb +1 -1
- data/lib/rainbows/coolio/server.rb +11 -0
- data/lib/rainbows/coolio/thread_client.rb +36 -0
- data/lib/rainbows/coolio.rb +45 -0
- data/lib/rainbows/coolio_fiber_spawn.rb +26 -0
- data/lib/rainbows/coolio_support.rb +9 -0
- data/lib/rainbows/coolio_thread_pool/client.rb +8 -0
- data/lib/rainbows/coolio_thread_pool/watcher.rb +14 -0
- data/lib/rainbows/coolio_thread_pool.rb +57 -0
- data/lib/rainbows/coolio_thread_spawn/client.rb +8 -0
- data/lib/rainbows/coolio_thread_spawn.rb +27 -0
- data/lib/rainbows/dev_fd_response.rb +6 -2
- data/lib/rainbows/ev_core/cap_input.rb +3 -2
- data/lib/rainbows/ev_core.rb +13 -3
- data/lib/rainbows/event_machine/client.rb +124 -0
- data/lib/rainbows/event_machine/response_pipe.rb +1 -2
- data/lib/rainbows/event_machine/server.rb +15 -0
- data/lib/rainbows/event_machine.rb +13 -137
- data/lib/rainbows/fiber/base.rb +6 -7
- data/lib/rainbows/fiber/body.rb +4 -2
- data/lib/rainbows/fiber/coolio/heartbeat.rb +15 -0
- data/lib/rainbows/fiber/{rev → coolio}/methods.rb +4 -5
- data/lib/rainbows/fiber/{rev → coolio}/server.rb +1 -1
- data/lib/rainbows/fiber/{rev → coolio}/sleeper.rb +2 -2
- data/lib/rainbows/fiber/coolio.rb +12 -0
- data/lib/rainbows/fiber/io/methods.rb +6 -0
- data/lib/rainbows/fiber/io.rb +8 -10
- data/lib/rainbows/fiber/queue.rb +24 -30
- data/lib/rainbows/fiber.rb +7 -4
- data/lib/rainbows/fiber_pool.rb +1 -1
- data/lib/rainbows/http_server.rb +9 -2
- data/lib/rainbows/max_body.rb +3 -1
- data/lib/rainbows/never_block/core.rb +15 -0
- data/lib/rainbows/never_block/event_machine.rb +8 -3
- data/lib/rainbows/never_block.rb +37 -70
- data/lib/rainbows/process_client.rb +3 -6
- data/lib/rainbows/rack_input.rb +17 -0
- data/lib/rainbows/response/body.rb +18 -19
- data/lib/rainbows/response.rb +1 -1
- data/lib/rainbows/rev.rb +21 -43
- data/lib/rainbows/rev_fiber_spawn.rb +4 -19
- data/lib/rainbows/rev_thread_pool.rb +21 -75
- data/lib/rainbows/rev_thread_spawn.rb +18 -36
- data/lib/rainbows/revactor/body.rb +4 -1
- data/lib/rainbows/revactor/tee_socket.rb +44 -0
- data/lib/rainbows/revactor.rb +13 -48
- data/lib/rainbows/socket_proxy.rb +24 -0
- data/lib/rainbows/sync_close.rb +37 -0
- data/lib/rainbows/thread_pool.rb +66 -70
- data/lib/rainbows/thread_spawn.rb +40 -50
- data/lib/rainbows/thread_timeout.rb +33 -27
- data/lib/rainbows/timed_read.rb +5 -1
- data/lib/rainbows/worker_yield.rb +16 -0
- data/lib/rainbows/writer_thread_pool/client.rb +19 -0
- data/lib/rainbows/writer_thread_pool.rb +60 -91
- data/lib/rainbows/writer_thread_spawn/client.rb +69 -0
- data/lib/rainbows/writer_thread_spawn.rb +37 -117
- data/lib/rainbows.rb +12 -4
- data/rainbows.gemspec +15 -19
- data/t/GNUmakefile +4 -4
- data/t/close-has-env.ru +65 -0
- data/t/simple-http_Coolio.ru +9 -0
- data/t/simple-http_CoolioFiberSpawn.ru +10 -0
- data/t/simple-http_CoolioThreadPool.ru +9 -0
- data/t/simple-http_CoolioThreadSpawn.ru +9 -0
- data/t/t0004-heartbeat-timeout.sh +2 -2
- data/t/t0007-worker-follows-master-to-death.sh +1 -1
- data/t/t0015-working_directory.sh +7 -1
- data/t/t0017-keepalive-timeout-zero.sh +1 -1
- data/t/t0019-keepalive-cpu-usage.sh +62 -0
- data/t/t0040-keepalive_requests-setting.sh +51 -0
- data/t/t0050-response-body-close-has-env.sh +109 -0
- data/t/t0102-rack-input-short.sh +6 -6
- data/t/t0106-rack-input-keepalive.sh +48 -2
- data/t/t0113-rewindable-input-false.sh +28 -0
- data/t/t0113.ru +12 -0
- data/t/t0114-rewindable-input-true.sh +28 -0
- data/t/t0114.ru +12 -0
- data/t/t9100-thread-timeout.sh +24 -2
- data/t/t9101-thread-timeout-threshold.sh +6 -13
- data/t/test-lib.sh +2 -1
- data/t/test_isolate.rb +9 -4
- data/t/times.ru +6 -0
- metadata +109 -42
- data/GIT-VERSION-FILE +0 -1
- data/lib/rainbows/fiber/rev/heartbeat.rb +0 -8
- data/lib/rainbows/fiber/rev/kato.rb +0 -22
- data/lib/rainbows/fiber/rev.rb +0 -13
- data/lib/rainbows/rev/client.rb +0 -194
- data/lib/rainbows/rev/core.rb +0 -41
- data/lib/rainbows/rev/heartbeat.rb +0 -23
- data/lib/rainbows/rev/thread.rb +0 -46
- 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
|
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
|
59
|
+
%td.mod CoolioThreadSpawn
|
55
60
|
%td.tee No
|
56
|
-
%td.r18
|
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
|
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
|
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
|
-
|
123
|
+
Cool.io should also work with Rubinius (though we haven't had time to test).
|
119
124
|
%li
|
120
|
-
|
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://
|
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
|
165
|
+
%td.mod Coolio
|
161
166
|
%td.slowio
|
162
|
-
%a(href="http://
|
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
|
182
|
+
%td.mod CoolioThreadSpawn
|
178
183
|
%td.slowio
|
179
184
|
thread-safe Ruby,
|
180
|
-
%a(href="http://
|
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
|
213
|
+
%td.mod CoolioThreadPool
|
209
214
|
%td.slowio
|
210
215
|
thread-safe Ruby,
|
211
|
-
%a(href="http://
|
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
|
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
|
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
|
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
|
346
|
+
%td.mod CoolioThreadPool
|
342
347
|
%td.devfd Yes
|
343
348
|
%td.app_pool Yes
|
344
349
|
%td.lock Dumb
|
345
|
-
%td.async
|
350
|
+
%td.async Coolio, standard Ruby
|
346
351
|
%td.ws no
|
347
352
|
%tr.comp_row
|
348
|
-
%td.mod
|
353
|
+
%td.mod CoolioFiberSpawn
|
349
354
|
%td.devfd Yes
|
350
355
|
%td.app_pool Yes
|
351
356
|
%td.lock No!
|
352
|
-
%td.async
|
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
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
|
45
|
+
man html:
|
46
|
+
$(MAKE) -C Documentation install-$@
|
48
47
|
|
49
|
-
|
50
|
-
|
51
|
-
|
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
|
-
|
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
|
-
|
62
|
-
$(
|
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
|
-
|
65
|
+
$(RM) -r doc
|
66
|
+
wrongdoc all
|
86
67
|
install -m644 COPYING doc/COPYING
|
87
|
-
install -m644 $(shell grep '^[A-Z]' .document)
|
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
|
-
|
112
|
-
publish_doc: NEWS
|
73
|
+
publish_doc:
|
113
74
|
-git set-file-times
|
114
|
-
$(
|
115
|
-
|
116
|
-
|
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
|
-
|
93
|
+
wrongdoc release_changes > $@+
|
136
94
|
$(VISUAL) $@+ && test -s $@+ && mv $@+ $@
|
137
95
|
$(release_notes):
|
138
|
-
|
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
|
170
|
-
cd pkg && tar
|
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
|
+
=== 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
|
-
===
|
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
|
-
===
|
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
|
-
* {
|
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
|
-
* {
|
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
|