rainbows 3.2.0 → 3.3.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 (70) hide show
  1. data/.document +1 -0
  2. data/COPYING +617 -282
  3. data/Documentation/comparison.haml +81 -24
  4. data/FAQ +3 -0
  5. data/GIT-VERSION-GEN +1 -1
  6. data/LICENSE +14 -5
  7. data/README +10 -9
  8. data/Sandbox +25 -0
  9. data/TODO +2 -22
  10. data/lib/rainbows.rb +50 -49
  11. data/lib/rainbows/client.rb +6 -5
  12. data/lib/rainbows/configurator.rb +191 -37
  13. data/lib/rainbows/const.rb +1 -1
  14. data/lib/rainbows/coolio.rb +4 -1
  15. data/lib/rainbows/coolio/client.rb +2 -2
  16. data/lib/rainbows/coolio/heartbeat.rb +2 -1
  17. data/lib/rainbows/coolio_fiber_spawn.rb +12 -7
  18. data/lib/rainbows/coolio_thread_pool.rb +19 -10
  19. data/lib/rainbows/coolio_thread_spawn.rb +3 -0
  20. data/lib/rainbows/epoll.rb +27 -5
  21. data/lib/rainbows/epoll/client.rb +3 -3
  22. data/lib/rainbows/ev_core.rb +2 -1
  23. data/lib/rainbows/event_machine.rb +4 -0
  24. data/lib/rainbows/event_machine/client.rb +2 -1
  25. data/lib/rainbows/fiber.rb +5 -0
  26. data/lib/rainbows/fiber/base.rb +1 -0
  27. data/lib/rainbows/fiber/coolio/methods.rb +0 -1
  28. data/lib/rainbows/fiber/io.rb +10 -6
  29. data/lib/rainbows/fiber/io/pipe.rb +6 -1
  30. data/lib/rainbows/fiber/io/socket.rb +6 -1
  31. data/lib/rainbows/fiber_pool.rb +12 -7
  32. data/lib/rainbows/fiber_spawn.rb +11 -6
  33. data/lib/rainbows/http_server.rb +55 -59
  34. data/lib/rainbows/join_threads.rb +4 -0
  35. data/lib/rainbows/max_body.rb +29 -10
  36. data/lib/rainbows/never_block.rb +7 -10
  37. data/lib/rainbows/pool_size.rb +14 -0
  38. data/lib/rainbows/process_client.rb +23 -1
  39. data/lib/rainbows/queue_pool.rb +8 -6
  40. data/lib/rainbows/response.rb +12 -11
  41. data/lib/rainbows/revactor.rb +14 -7
  42. data/lib/rainbows/revactor/client.rb +2 -2
  43. data/lib/rainbows/stream_file.rb +11 -4
  44. data/lib/rainbows/thread_pool.rb +12 -28
  45. data/lib/rainbows/thread_spawn.rb +14 -13
  46. data/lib/rainbows/thread_timeout.rb +118 -30
  47. data/lib/rainbows/writer_thread_pool/client.rb +1 -1
  48. data/lib/rainbows/writer_thread_spawn/client.rb +2 -2
  49. data/lib/rainbows/xepoll.rb +13 -5
  50. data/lib/rainbows/xepoll/client.rb +19 -17
  51. data/lib/rainbows/xepoll_thread_pool.rb +82 -0
  52. data/lib/rainbows/xepoll_thread_pool/client.rb +129 -0
  53. data/lib/rainbows/xepoll_thread_spawn.rb +58 -0
  54. data/lib/rainbows/xepoll_thread_spawn/client.rb +121 -0
  55. data/pkg.mk +4 -0
  56. data/rainbows.gemspec +4 -1
  57. data/t/GNUmakefile +5 -1
  58. data/t/client_header_buffer_size.ru +5 -0
  59. data/t/simple-http_XEpollThreadPool.ru +10 -0
  60. data/t/simple-http_XEpollThreadSpawn.ru +10 -0
  61. data/t/t0022-copy_stream-byte-range.sh +1 -15
  62. data/t/t0026-splice-copy_stream-byte-range.sh +25 -0
  63. data/t/t0027-nil-copy_stream.sh +60 -0
  64. data/t/t0041-optional-pool-size.sh +2 -2
  65. data/t/t0042-client_header_buffer_size.sh +65 -0
  66. data/t/t9100-thread-timeout.sh +1 -6
  67. data/t/t9101-thread-timeout-threshold.sh +1 -6
  68. data/t/test-lib.sh +58 -0
  69. data/t/test_isolate.rb +9 -3
  70. metadata +47 -16
data/pkg.mk CHANGED
@@ -167,5 +167,9 @@ doc_gz: docs = $(shell find doc -type f ! -regex '^.*\.\(gif\|jpg\|png\|gz\)$$')
167
167
  doc_gz:
168
168
  for i in $(docs); do \
169
169
  gzip --rsyncable -9 < $$i > $$i.gz; touch -r $$i $$i.gz; done
170
+ check-warnings:
171
+ @(for i in $$(git ls-files '*.rb'|grep -v '^setup\.rb$$'); \
172
+ do $(RUBY) -d -W2 -c $$i; done) | grep -v '^Syntax OK$$' || :
170
173
 
171
174
  .PHONY: all .FORCE-GIT-VERSION-FILE doc test $(test_units) manifest
175
+ .PHONY: check-warnings
data/rainbows.gemspec CHANGED
@@ -24,8 +24,11 @@ Gem::Specification.new do |s|
24
24
  # we want a newer Rack for a valid HeaderHash#each
25
25
  s.add_dependency(%q<rack>, ['~> 1.1'])
26
26
 
27
+ # kgio has some fixes for MRI 1.9.3dev that affect us
28
+ s.add_dependency(%q<kgio>, ['~> 2.4'])
29
+
27
30
  # we need Unicorn for the HTTP parser and process management
28
- s.add_dependency(%q<unicorn>, ["~> 3.5"])
31
+ s.add_dependency(%q<unicorn>, ["~> 3.6"])
29
32
  s.add_development_dependency(%q<isolate>, "~> 3.0.0")
30
33
  s.add_development_dependency(%q<wrongdoc>, "~> 1.5")
31
34
 
data/t/GNUmakefile CHANGED
@@ -21,6 +21,8 @@ export RUBY_VERSION RUBY_ENGINE
21
21
 
22
22
  ifeq (Linux,$(shell uname -s))
23
23
  models += XEpoll
24
+ models += XEpollThreadSpawn
25
+ models += XEpollThreadPool
24
26
  models += Epoll
25
27
  endif
26
28
  models += WriterThreadPool
@@ -35,7 +37,9 @@ ifeq ($(RUBY_ENGINE),ruby)
35
37
  rp := )
36
38
  ONENINE := $(shell case $(RUBY_VERSION) in 1.9.*$(rp) echo true;;esac)
37
39
  ifeq ($(ONENINE),true)
38
- models += Revactor
40
+ ifeq ($(RUBY_VERSION),1.9.2)
41
+ models += Revactor
42
+ endif
39
43
  models += FiberSpawn
40
44
  models += FiberPool
41
45
  models += CoolioThreadPool
@@ -0,0 +1,5 @@
1
+ use Rack::ContentLength
2
+ use Rack::ContentType, "text/plain"
3
+ run lambda { |env|
4
+ [ 200, {}, [ "#{Rainbows.server.client_header_buffer_size}\n" ] ]
5
+ }
@@ -0,0 +1,10 @@
1
+ use Rack::ContentLength
2
+ use Rack::ContentType
3
+ run lambda { |env|
4
+ if env['rack.multithread'] == true &&
5
+ env['rainbows.model'] == :XEpollThreadPool
6
+ [ 200, {}, [ Thread.current.inspect << "\n" ] ]
7
+ else
8
+ raise env.inspect
9
+ end
10
+ }
@@ -0,0 +1,10 @@
1
+ use Rack::ContentLength
2
+ use Rack::ContentType
3
+ run lambda { |env|
4
+ if env['rack.multithread'] == true &&
5
+ env['rainbows.model'] == :XEpollThreadSpawn
6
+ [ 200, {}, [ Thread.current.inspect << "\n" ] ]
7
+ else
8
+ raise env.inspect
9
+ end
10
+ }
@@ -1,21 +1,7 @@
1
1
  #!/bin/sh
2
2
  . ./test-lib.sh
3
3
  test -r random_blob || die "random_blob required, run with 'make $0'"
4
- case $RUBY_VERSION in
5
- 1.9.*) ;;
6
- *)
7
- t_info "skipping $T since it can't IO.copy_stream"
8
- exit 0
9
- ;;
10
- esac
11
-
12
- case $model in
13
- ThreadSpawn|WriterThreadSpawn|ThreadPool|WriterThreadPool|Base) ;;
14
- *)
15
- t_info "skipping $T since it doesn't use IO.copy_stream"
16
- exit 0
17
- ;;
18
- esac
4
+ check_copy_stream
19
5
 
20
6
  t_plan 13 "IO.copy_stream byte range response for $model"
21
7
 
@@ -0,0 +1,25 @@
1
+ #!/bin/sh
2
+ . ./test-lib.sh
3
+ test -r random_blob || die "random_blob required, run with 'make $0'"
4
+ check_copy_stream
5
+ check_splice
6
+
7
+ t_plan 13 "IO::Splice.copy_stream byte range response for $model"
8
+
9
+ t_begin "setup and startup" && {
10
+ rtmpfiles out err
11
+ rainbows_setup $model
12
+ cat >> $unicorn_config <<EOF
13
+ require "io/splice"
14
+ Rainbows! do
15
+ copy_stream IO::Splice
16
+ end
17
+ def (::IO).copy_stream(*x); abort "NO"; end
18
+ EOF
19
+
20
+ # can't load Rack::Lint here since it clobbers body#to_path
21
+ rainbows -E none -D large-file-response.ru -c $unicorn_config
22
+ rainbows_wait_start
23
+ }
24
+
25
+ . ./byte-range-common.sh
@@ -0,0 +1,60 @@
1
+ #!/bin/sh
2
+ . ./test-lib.sh
3
+ test -r random_blob || die "random_blob required, run with 'make $0'"
4
+ check_copy_stream
5
+
6
+ t_plan 7 "large file 'copy_stream nil' test for $model"
7
+
8
+ t_begin "setup and startup" && {
9
+ rtmpfiles curl_out
10
+ rainbows_setup $model
11
+ cat >> $unicorn_config <<EOF
12
+ Rainbows! do
13
+ copy_stream nil
14
+ end
15
+ EOF
16
+ rainbows -E none -D large-file-response.ru -c $unicorn_config
17
+ rainbows_wait_start
18
+ }
19
+
20
+ t_begin "read random blob sha1 and size" && {
21
+ random_blob_sha1=$(rsha1 < random_blob)
22
+ random_blob_size=$(wc -c < random_blob)
23
+ }
24
+
25
+ t_begin "send a series HTTP/1.1 requests sequentially" && {
26
+ for i in a b c
27
+ do
28
+ sha1=$( (curl -sSfv http://$listen/random_blob &&
29
+ echo ok >$ok) | rsha1)
30
+ test $sha1 = $random_blob_sha1
31
+ test xok = x$(cat $ok)
32
+ done
33
+ }
34
+
35
+ # this was a problem during development
36
+ t_begin "HTTP/1.0 test" && {
37
+ sha1=$( (curl -0 -sSfv http://$listen/random_blob &&
38
+ echo ok >$ok) | rsha1)
39
+ test $sha1 = $random_blob_sha1
40
+ test xok = x$(cat $ok)
41
+ }
42
+
43
+ t_begin "HTTP/0.9 test" && {
44
+ (
45
+ printf 'GET /random_blob\r\n'
46
+ rsha1 < $fifo > $tmp &
47
+ wait
48
+ echo ok > $ok
49
+ ) | socat - TCP:$listen > $fifo
50
+ test $(cat $tmp) = $random_blob_sha1
51
+ test xok = x$(cat $ok)
52
+ }
53
+
54
+ t_begin "shutdown server" && {
55
+ kill -QUIT $rainbows_pid
56
+ }
57
+
58
+ t_begin "check stderr" && check_stderr
59
+
60
+ t_done
@@ -2,9 +2,9 @@
2
2
  . ./test-lib.sh
3
3
 
4
4
  case $model in
5
- NeverBlock|CoolioThreadPool) ;;
5
+ NeverBlock|CoolioThreadPool|XEpollThreadPool) ;;
6
6
  *)
7
- t_info "skipping $T since it doesn't support :pool_size"
7
+ t_info "skipping $model.$T since it doesn't support :pool_size"
8
8
  exit
9
9
  ;;
10
10
  esac
@@ -0,0 +1,65 @@
1
+ #!/bin/sh
2
+ . ./test-lib.sh
3
+
4
+ t_plan 8 "client_header_buffer_size tests for $model"
5
+
6
+ t_begin "setup and startup" && {
7
+ rainbows_setup $model
8
+ }
9
+
10
+ t_begin "fails with zero buffer size" && {
11
+ ed -s $unicorn_config <<EOF
12
+ ,s/^ client_max_body_size.*/ client_header_buffer_size 0/
13
+ w
14
+ EOF
15
+ grep "client_header_buffer_size 0" $unicorn_config
16
+ rainbows -D client_header_buffer_size.ru -c $unicorn_config || \
17
+ echo err=$? > $ok
18
+ test x"$(cat $ok)" = "xerr=1"
19
+ }
20
+
21
+ t_begin "fails with negative value" && {
22
+ ed -s $unicorn_config <<EOF
23
+ ,s/^ client_header_buffer_size.*/ client_header_buffer_size -1/
24
+ w
25
+ EOF
26
+ grep "client_header_buffer_size -1" $unicorn_config
27
+ rainbows -D client_header_buffer_size.ru -c $unicorn_config || \
28
+ echo err=$? > $ok
29
+ test x"$(cat $ok)" = "xerr=1"
30
+ }
31
+
32
+ t_begin "fails with negative value" && {
33
+ ed -s $unicorn_config <<EOF
34
+ ,s/^ client_header_buffer_size.*/ client_header_buffer_size -1/
35
+ w
36
+ EOF
37
+ grep "client_header_buffer_size -1" $unicorn_config
38
+ rainbows -D client_header_buffer_size.ru -c $unicorn_config || \
39
+ echo err=$? > $ok
40
+ test x"$(cat $ok)" = "xerr=1"
41
+ }
42
+
43
+ t_begin "starts with correct value" && {
44
+ ed -s $unicorn_config <<EOF
45
+ ,s/^ client_header_buffer_size.*/ client_header_buffer_size 16399/
46
+ w
47
+ EOF
48
+ grep "client_header_buffer_size 16399" $unicorn_config
49
+ rainbows -D client_header_buffer_size.ru -c $unicorn_config
50
+ rainbows_wait_start
51
+ }
52
+
53
+ t_begin "regular TCP request works right" && {
54
+ test x$(curl -sSfv http://$listen/) = x16399
55
+ }
56
+
57
+ t_begin "no errors in stderr" && {
58
+ check_stderr
59
+ }
60
+
61
+ t_begin "shutdown" && {
62
+ kill $rainbows_pid
63
+ }
64
+
65
+ t_done
@@ -1,11 +1,6 @@
1
1
  #!/bin/sh
2
2
  . ./test-lib.sh
3
- case $model in
4
- ThreadSpawn|ThreadPool) ;;
5
- RevThreadSpawn|RevThreadPool) ;;
6
- CoolioThreadSpawn|CoolioThreadPool) ;;
7
- *) t_info "$0 is only compatible with Thread*"; exit 0 ;;
8
- esac
3
+ check_threaded_app_dispatch
9
4
 
10
5
  t_plan 6 "ThreadTimeout Rack middleware test for $model"
11
6
 
@@ -1,11 +1,6 @@
1
1
  #!/bin/sh
2
2
  . ./test-lib.sh
3
- case $model in
4
- ThreadSpawn|ThreadPool) ;;
5
- RevThreadSpawn|RevThreadPool) ;;
6
- CoolioThreadSpawn|CoolioThreadPool) ;;
7
- *) t_info "$0 is only compatible with Thread*"; exit 0 ;;
8
- esac
3
+ check_threaded_app_dispatch
9
4
 
10
5
  t_plan 6 "ThreadTimeout Rack middleware test for $model"
11
6
 
data/t/test-lib.sh CHANGED
@@ -198,6 +198,64 @@ req_curl_chunked_upload_err_check () {
198
198
  fi
199
199
  }
200
200
 
201
+ check_splice () {
202
+ case $(uname -s) in
203
+ Linux) ;;
204
+ *)
205
+ t_info "skipping $T since it's not Linux"
206
+ exit 0
207
+ ;;
208
+ esac
209
+
210
+ # we only allow splice on 2.6.32+
211
+ min=32 uname_r=$(uname -r)
212
+ case $uname_r in
213
+ 2.6.*)
214
+ sub=$(expr "$uname_r" : '2\.6\.\(.*\)$')
215
+ if test $sub -lt $min
216
+ then
217
+ t_info "skipping $T (Linux $(uname_r < 2.6.$min)"
218
+ exit 0
219
+ fi
220
+ ;;
221
+ *)
222
+ t_info "skipping $T (Linux $uname_r < 2.6.$min)"
223
+ exit 0
224
+ ;;
225
+ esac
226
+ }
227
+
228
+ check_threaded_app_dispatch () {
229
+ case $model in
230
+ ThreadSpawn|ThreadPool) ;;
231
+ RevThreadSpawn|RevThreadPool) ;;
232
+ CoolioThreadSpawn|CoolioThreadPool) ;;
233
+ XEpollThreadSpawn|XEpollThreadPool) ;;
234
+ *)
235
+ t_info "$0 is only compatible with threaded app dispatch"
236
+ exit 0 ;;
237
+ esac
238
+ }
239
+
240
+ check_copy_stream () {
241
+ case $RUBY_VERSION in
242
+ 1.9.*) ;;
243
+ *)
244
+ t_info "skipping $T since it can't IO.copy_stream"
245
+ exit 0
246
+ ;;
247
+ esac
248
+
249
+ case $model in
250
+ ThreadSpawn|WriterThreadSpawn|ThreadPool|WriterThreadPool|Base) ;;
251
+ XEpollThreadSpawn|XEpollThreadPool) ;;
252
+ *)
253
+ t_info "skipping $T since it doesn't use copy_stream"
254
+ exit 0
255
+ ;;
256
+ esac
257
+ }
258
+
201
259
  case $model in
202
260
  Rev) require_check rev Rev::VERSION ;;
203
261
  Coolio) require_check coolio Coolio::VERSION ;;
data/t/test_isolate.rb CHANGED
@@ -16,9 +16,10 @@ $stdout.reopen($stderr)
16
16
  lock = File.open(__FILE__, "rb")
17
17
  lock.flock(File::LOCK_EX)
18
18
  Isolate.now!(opts) do
19
- gem 'unicorn', '3.5.0'
19
+ gem 'kgio', '2.4.0'
20
+ gem 'unicorn', '3.6.2'
20
21
  gem 'kcar', '0.2.0'
21
- gem 'raindrops', '0.4.1'
22
+ gem 'raindrops', '0.6.1'
22
23
 
23
24
  if engine == "ruby"
24
25
  gem 'sendfile', '1.1.0' # next Rubinius should support this
@@ -36,7 +37,12 @@ Isolate.now!(opts) do
36
37
  gem 'rack-fiber_pool', '0.9.1'
37
38
  end
38
39
 
39
- gem 'sleepy_penguin', '2.0.0' if RUBY_PLATFORM =~ /linux/
40
+ if RUBY_PLATFORM =~ /linux/
41
+ gem 'sleepy_penguin', '2.0.0'
42
+
43
+ # is 2.6.32 new enough?
44
+ gem 'io_splice', '4.1.0' if `uname -r`.strip > '2.6.32'
45
+ end
40
46
  end
41
47
 
42
48
  $stdout.reopen(old_out)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rainbows
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 3
8
- - 2
8
+ - 3
9
9
  - 0
10
- version: 3.2.0
10
+ version: 3.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Rainbows! hackers
@@ -15,8 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-15 00:00:00 +00:00
19
- default_executable:
18
+ date: 2011-05-16 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: rack
@@ -34,24 +33,39 @@ dependencies:
34
33
  type: :runtime
35
34
  version_requirements: *id001
36
35
  - !ruby/object:Gem::Dependency
37
- name: unicorn
36
+ name: kgio
38
37
  prerelease: false
39
38
  requirement: &id002 !ruby/object:Gem::Requirement
40
39
  none: false
41
40
  requirements:
42
41
  - - ~>
43
42
  - !ruby/object:Gem::Version
44
- hash: 13
43
+ hash: 11
45
44
  segments:
46
- - 3
47
- - 5
48
- version: "3.5"
45
+ - 2
46
+ - 4
47
+ version: "2.4"
49
48
  type: :runtime
50
49
  version_requirements: *id002
51
50
  - !ruby/object:Gem::Dependency
52
- name: isolate
51
+ name: unicorn
53
52
  prerelease: false
54
53
  requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ hash: 11
59
+ segments:
60
+ - 3
61
+ - 6
62
+ version: "3.6"
63
+ type: :runtime
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: isolate
67
+ prerelease: false
68
+ requirement: &id004 !ruby/object:Gem::Requirement
55
69
  none: false
56
70
  requirements:
57
71
  - - ~>
@@ -63,11 +77,11 @@ dependencies:
63
77
  - 0
64
78
  version: 3.0.0
65
79
  type: :development
66
- version_requirements: *id003
80
+ version_requirements: *id004
67
81
  - !ruby/object:Gem::Dependency
68
82
  name: wrongdoc
69
83
  prerelease: false
70
- requirement: &id004 !ruby/object:Gem::Requirement
84
+ requirement: &id005 !ruby/object:Gem::Requirement
71
85
  none: false
72
86
  requirements:
73
87
  - - ~>
@@ -78,7 +92,7 @@ dependencies:
78
92
  - 5
79
93
  version: "1.5"
80
94
  type: :development
81
- version_requirements: *id004
95
+ version_requirements: *id005
82
96
  description: |-
83
97
  \Rainbows! is an HTTP server for sleepy Rack applications. It is based on
84
98
  Unicorn, but designed to handle applications that expect long
@@ -156,6 +170,7 @@ extra_rdoc_files:
156
170
  - lib/rainbows/never_block.rb
157
171
  - lib/rainbows/never_block/core.rb
158
172
  - lib/rainbows/never_block/event_machine.rb
173
+ - lib/rainbows/pool_size.rb
159
174
  - lib/rainbows/process_client.rb
160
175
  - lib/rainbows/queue_pool.rb
161
176
  - lib/rainbows/response.rb
@@ -189,6 +204,10 @@ extra_rdoc_files:
189
204
  - lib/rainbows/writer_thread_spawn/client.rb
190
205
  - lib/rainbows/xepoll.rb
191
206
  - lib/rainbows/xepoll/client.rb
207
+ - lib/rainbows/xepoll_thread_pool.rb
208
+ - lib/rainbows/xepoll_thread_pool/client.rb
209
+ - lib/rainbows/xepoll_thread_spawn.rb
210
+ - lib/rainbows/xepoll_thread_spawn/client.rb
192
211
  - LATEST
193
212
  - LICENSE
194
213
  - NEWS
@@ -200,6 +219,7 @@ extra_rdoc_files:
200
219
  - Summary
201
220
  - Test_Suite
202
221
  - Static_Files
222
+ - Sandbox
203
223
  files:
204
224
  - .document
205
225
  - .gitignore
@@ -223,6 +243,7 @@ files:
223
243
  - README
224
244
  - Rakefile
225
245
  - SIGNALS
246
+ - Sandbox
226
247
  - Static_Files
227
248
  - Summary
228
249
  - TODO
@@ -294,6 +315,7 @@ files:
294
315
  - lib/rainbows/never_block.rb
295
316
  - lib/rainbows/never_block/core.rb
296
317
  - lib/rainbows/never_block/event_machine.rb
318
+ - lib/rainbows/pool_size.rb
297
319
  - lib/rainbows/process_client.rb
298
320
  - lib/rainbows/queue_pool.rb
299
321
  - lib/rainbows/response.rb
@@ -327,6 +349,10 @@ files:
327
349
  - lib/rainbows/writer_thread_spawn/client.rb
328
350
  - lib/rainbows/xepoll.rb
329
351
  - lib/rainbows/xepoll/client.rb
352
+ - lib/rainbows/xepoll_thread_pool.rb
353
+ - lib/rainbows/xepoll_thread_pool/client.rb
354
+ - lib/rainbows/xepoll_thread_spawn.rb
355
+ - lib/rainbows/xepoll_thread_spawn/client.rb
330
356
  - local.mk.sample
331
357
  - man/man1/rainbows.1
332
358
  - pkg.mk
@@ -348,6 +374,7 @@ files:
348
374
  - t/bin/unused_listen
349
375
  - t/bin/utee
350
376
  - t/byte-range-common.sh
377
+ - t/client_header_buffer_size.ru
351
378
  - t/close-has-env.ru
352
379
  - t/close-pipe-response.ru
353
380
  - t/close-pipe-to_path-response.ru
@@ -388,6 +415,8 @@ files:
388
415
  - t/simple-http_WriterThreadPool.ru
389
416
  - t/simple-http_WriterThreadSpawn.ru
390
417
  - t/simple-http_XEpoll.ru
418
+ - t/simple-http_XEpollThreadPool.ru
419
+ - t/simple-http_XEpollThreadSpawn.ru
391
420
  - t/sleep.ru
392
421
  - t/t0000-simple-http.sh
393
422
  - t/t0000.ru
@@ -419,6 +448,8 @@ files:
419
448
  - t/t0023-sendfile-byte-range.sh
420
449
  - t/t0024-pipelined-sendfile-response.sh
421
450
  - t/t0025-write-on-close.sh
451
+ - t/t0026-splice-copy_stream-byte-range.sh
452
+ - t/t0027-nil-copy_stream.sh
422
453
  - t/t0030-fast-pipe-response.sh
423
454
  - t/t0031-close-pipe-response.sh
424
455
  - t/t0032-close-pipe-to_path-response.sh
@@ -426,6 +457,7 @@ files:
426
457
  - t/t0035-kgio-pipe-response.sh
427
458
  - t/t0040-keepalive_requests-setting.sh
428
459
  - t/t0041-optional-pool-size.sh
460
+ - t/t0042-client_header_buffer_size.sh
429
461
  - t/t0050-response-body-close-has-env.sh
430
462
  - t/t0100-rack-input-hammer-chunked.sh
431
463
  - t/t0100-rack-input-hammer-content-length.sh
@@ -468,7 +500,6 @@ files:
468
500
  - t/worker-follows-master-to-death.ru
469
501
  - t/write-on-close.ru
470
502
  - vs_Unicorn
471
- has_rdoc: true
472
503
  homepage: http://rainbows.rubyforge.org/
473
504
  licenses: []
474
505
 
@@ -501,7 +532,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
501
532
  requirements: []
502
533
 
503
534
  rubyforge_project: rainbows
504
- rubygems_version: 1.6.1
535
+ rubygems_version: 1.8.2
505
536
  signing_key:
506
537
  specification_version: 3
507
538
  summary: "- Unicorn for sleepy apps and slow clients"