rainbows 2.1.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/GIT-VERSION-GEN +1 -1
  2. data/GNUmakefile +2 -3
  3. data/Rakefile +5 -2
  4. data/lib/rainbows.rb +72 -54
  5. data/lib/rainbows/base.rb +7 -9
  6. data/lib/rainbows/client.rb +25 -4
  7. data/lib/rainbows/const.rb +1 -1
  8. data/lib/rainbows/coolio.rb +6 -3
  9. data/lib/rainbows/coolio/client.rb +78 -57
  10. data/lib/rainbows/coolio/core.rb +1 -4
  11. data/lib/rainbows/coolio/heartbeat.rb +2 -3
  12. data/lib/rainbows/coolio/master.rb +3 -2
  13. data/lib/rainbows/coolio/{deferred_chunk_response.rb → response_chunk_pipe.rb} +1 -2
  14. data/lib/rainbows/coolio/{deferred_response.rb → response_pipe.rb} +1 -1
  15. data/lib/rainbows/coolio/thread_client.rb +4 -6
  16. data/lib/rainbows/coolio_fiber_spawn.rb +1 -1
  17. data/lib/rainbows/coolio_thread_pool.rb +1 -1
  18. data/lib/rainbows/coolio_thread_pool/watcher.rb +2 -4
  19. data/lib/rainbows/coolio_thread_spawn.rb +1 -1
  20. data/lib/rainbows/dev_fd_response.rb +2 -2
  21. data/lib/rainbows/error.rb +5 -7
  22. data/lib/rainbows/ev_core.rb +20 -7
  23. data/lib/rainbows/event_machine.rb +6 -5
  24. data/lib/rainbows/event_machine/client.rb +46 -53
  25. data/lib/rainbows/event_machine/response_pipe.rb +2 -3
  26. data/lib/rainbows/fiber/base.rb +5 -5
  27. data/lib/rainbows/fiber/body.rb +4 -13
  28. data/lib/rainbows/fiber/coolio/heartbeat.rb +1 -3
  29. data/lib/rainbows/fiber/coolio/server.rb +4 -7
  30. data/lib/rainbows/fiber_pool.rb +1 -1
  31. data/lib/rainbows/fiber_spawn.rb +2 -2
  32. data/lib/rainbows/http_parser.rb +12 -0
  33. data/lib/rainbows/http_server.rb +5 -7
  34. data/lib/rainbows/max_body.rb +2 -2
  35. data/lib/rainbows/never_block/core.rb +1 -1
  36. data/lib/rainbows/process_client.rb +15 -29
  37. data/lib/rainbows/queue_pool.rb +1 -3
  38. data/lib/rainbows/rack_input.rb +3 -3
  39. data/lib/rainbows/response.rb +164 -38
  40. data/lib/rainbows/revactor.rb +5 -65
  41. data/lib/rainbows/revactor/client.rb +60 -0
  42. data/lib/rainbows/revactor/{body.rb → client/methods.rb} +14 -14
  43. data/lib/rainbows/revactor/{tee_socket.rb → client/tee_socket.rb} +1 -1
  44. data/lib/rainbows/sendfile.rb +1 -2
  45. data/lib/rainbows/server_token.rb +1 -1
  46. data/lib/rainbows/thread_pool.rb +9 -9
  47. data/lib/rainbows/thread_spawn.rb +7 -6
  48. data/lib/rainbows/thread_timeout.rb +1 -1
  49. data/lib/rainbows/writer_thread_pool.rb +9 -25
  50. data/lib/rainbows/writer_thread_pool/client.rb +44 -1
  51. data/lib/rainbows/writer_thread_spawn.rb +2 -11
  52. data/lib/rainbows/writer_thread_spawn/client.rb +53 -13
  53. data/rainbows.gemspec +3 -12
  54. data/t/async_chunk_app.ru +62 -0
  55. data/t/byte-range-common.sh +142 -0
  56. data/t/t0022-copy_stream-byte-range.sh +2 -111
  57. data/t/t0023-sendfile-byte-range.sh +2 -32
  58. data/t/t0025-write-on-close.sh +23 -0
  59. data/t/t0040-keepalive_requests-setting.sh +0 -5
  60. data/t/t0402-async-keepalive.sh +146 -0
  61. data/t/t0500-cramp-streaming.sh +2 -0
  62. data/t/t0501-cramp-rainsocket.sh +2 -0
  63. data/t/t9000-rack-app-pool.sh +1 -1
  64. data/t/test_isolate.rb +5 -10
  65. data/t/test_isolate_cramp.rb +26 -0
  66. data/t/write-on-close.ru +11 -0
  67. metadata +33 -30
  68. data/lib/rainbows/coolio/sendfile.rb +0 -17
  69. data/lib/rainbows/response/body.rb +0 -127
  70. data/lib/rainbows/response/range.rb +0 -34
  71. data/lib/rainbows/timed_read.rb +0 -28
@@ -17,7 +17,7 @@ EventMachine|NeverBlock)
17
17
  *) ;;
18
18
  esac
19
19
 
20
- t_plan 7 "sendfile byte range response for $model"
20
+ t_plan 13 "sendfile byte range response for $model"
21
21
 
22
22
  t_begin "setup and startup" && {
23
23
  rtmpfiles out err
@@ -28,36 +28,6 @@ t_begin "setup and startup" && {
28
28
  # can't load Rack::Lint here since it clobbers body#to_path
29
29
  rainbows -E none -D large-file-response.ru -c $unicorn_config
30
30
  rainbows_wait_start
31
- range_head=-r-365
32
- range_tail=-r155-
33
- range_mid=-r200-300
34
31
  }
35
32
 
36
- t_begin "read random blob sha1s" && {
37
- sha1_head=$(curl -sSf $range_head file://random_blob | rsha1)
38
- sha1_tail=$(curl -sSf $range_tail file://random_blob | rsha1)
39
- sha1_mid=$(curl -sSf $range_mid file://random_blob | rsha1)
40
- }
41
-
42
- t_begin "head range matches" && {
43
- sha1="$(curl -sSv $range_head http://$listen/random_blob | rsha1)"
44
- test x"$sha1_head" = x"$sha1"
45
- }
46
-
47
- t_begin "tail range matches" && {
48
- sha1="$(curl -sS $range_tail http://$listen/random_blob | rsha1)"
49
- test x"$sha1_tail" = x"$sha1"
50
- }
51
-
52
- t_begin "mid range matches" && {
53
- sha1="$(curl -sS $range_mid http://$listen/random_blob | rsha1)"
54
- test x"$sha1_mid" = x"$sha1"
55
- }
56
-
57
- t_begin "shutdown server" && {
58
- kill -QUIT $rainbows_pid
59
- }
60
-
61
- t_begin "check stderr" && check_stderr
62
-
63
- t_done
33
+ . ./byte-range-common.sh
@@ -0,0 +1,23 @@
1
+ #!/bin/sh
2
+ . ./test-lib.sh
3
+ t_plan 4 "write-on-close tests for funky response-bodies"
4
+
5
+ t_begin "setup and start" && {
6
+ rainbows_setup
7
+ rainbows -D -c $unicorn_config write-on-close.ru
8
+ rainbows_wait_start
9
+ }
10
+
11
+ t_begin "write-on-close response body succeeds" && {
12
+ test xGoodbye = x"$(curl -sSf --http1.0 http://$listen/)"
13
+ }
14
+
15
+ t_begin "killing succeeds" && {
16
+ kill $rainbows_pid
17
+ }
18
+
19
+ t_begin "check stderr" && {
20
+ check_stderr
21
+ }
22
+
23
+ t_done
@@ -6,11 +6,6 @@ t_begin "setup and start" && {
6
6
  rainbows_setup $model 50 666
7
7
  rtmpfiles curl_out curl_err
8
8
  grep 'keepalive_timeout 666' $unicorn_config
9
- ed -s $unicorn_config <<EOF
10
- ,s/listen.*/&, :tcp_nodelay => true/
11
- w
12
- EOF
13
- grep nodelay $unicorn_config
14
9
  rainbows -E none -D env.ru -c $unicorn_config
15
10
  rainbows_wait_start
16
11
  }
@@ -0,0 +1,146 @@
1
+ #!/bin/sh
2
+ DELAY=${DELAY-1}
3
+ . ./test-lib.sh
4
+ case $model in
5
+ Coolio|NeverBlock|EventMachine) ;;
6
+ *)
7
+ t_info "skipping $T since it's not compatible with $model"
8
+ exit 0
9
+ ;;
10
+ esac
11
+
12
+ t_plan 12 "async_chunk_app test for test for $model"
13
+
14
+ CONFIG_RU=async_chunk_app.ru
15
+
16
+ t_begin "setup and start" && {
17
+ rainbows_setup
18
+ rtmpfiles a b c curl_err expect
19
+
20
+ # this does not does not support Rack::Lint
21
+ rainbows -E none -D $CONFIG_RU -c $unicorn_config
22
+ rainbows_wait_start
23
+
24
+ echo 'Hello World /0' >> $expect
25
+ echo 'Hello World /1' >> $expect
26
+ echo 'Hello World /2' >> $expect
27
+ }
28
+
29
+ t_begin "async.callback supports pipelining" && {
30
+ rm -f $tmp
31
+ t0=$(date +%s)
32
+ (
33
+ cat $fifo > $tmp &
34
+ printf 'GET /0 HTTP/1.1\r\nHost: example.com\r\n\r\n'
35
+ printf 'GET /1 HTTP/1.1\r\nHost: example.com\r\n\r\n'
36
+ printf 'GET /2 HTTP/1.0\r\nHost: example.com\r\n\r\n'
37
+ wait
38
+ ) | socat - TCP:$listen > $fifo
39
+ t1=$(date +%s)
40
+ elapsed=$(( $t1 - $t0 ))
41
+ t_info "elapsed=$elapsed $model.$0 ($t_current)"
42
+ test 3 -eq "$(fgrep 'HTTP/1.1 200 OK' $tmp | wc -l)"
43
+ test 3 -eq "$(grep '^Hello ' $tmp | wc -l)"
44
+ test 3 -eq "$(grep 'World ' $tmp | wc -l)"
45
+ }
46
+
47
+ t_begin "async.callback supports delayed pipelining" && {
48
+ rm -f $tmp
49
+ t0=$(date +%s)
50
+ (
51
+ cat $fifo > $tmp &
52
+ printf 'GET /0 HTTP/1.1\r\nHost: example.com\r\n\r\n'
53
+ sleep 1
54
+ printf 'GET /1 HTTP/1.1\r\nHost: example.com\r\n\r\n'
55
+ sleep 1
56
+ printf 'GET /2 HTTP/1.0\r\nHost: example.com\r\n\r\n'
57
+ wait
58
+ ) | socat - TCP:$listen > $fifo
59
+ t1=$(date +%s)
60
+ elapsed=$(( $t1 - $t0 ))
61
+ t_info "elapsed=$elapsed $model.$0 ($t_current)"
62
+ test 3 -eq "$(fgrep 'HTTP/1.1 200 OK' $tmp | wc -l)"
63
+ test 3 -eq "$(grep '^Hello ' $tmp | wc -l)"
64
+ test 3 -eq "$(grep 'World ' $tmp | wc -l)"
65
+ }
66
+
67
+ t_begin "async.callback supports pipelining with delay $DELAY" && {
68
+ rm -f $tmp
69
+ t0=$(date +%s)
70
+ (
71
+ cat $fifo > $tmp &
72
+ printf 'GET /0 HTTP/1.1\r\nX-Delay: %d\r\n' $DELAY
73
+ printf 'Host: example.com\r\n\r\n'
74
+ printf 'GET /1 HTTP/1.1\r\nX-Delay: %d\r\n' $DELAY
75
+ printf 'Host: example.com\r\n\r\n'
76
+ printf 'GET /2 HTTP/1.0\r\nX-Delay: %d\r\n' $DELAY
77
+ printf 'Host: example.com\r\n\r\n'
78
+ wait
79
+ ) | socat - TCP:$listen > $fifo
80
+ t1=$(date +%s)
81
+ elapsed=$(( $t1 - $t0 ))
82
+ min=$(( $DELAY * 3 ))
83
+ t_info "elapsed=$elapsed $model.$0 ($t_current) min=$min"
84
+ test $elapsed -ge $min
85
+ test 3 -eq "$(fgrep 'HTTP/1.1 200 OK' $tmp | wc -l)"
86
+ test 3 -eq "$(grep '^Hello ' $tmp | wc -l)"
87
+ test 3 -eq "$(grep 'World ' $tmp | wc -l)"
88
+ }
89
+
90
+ t_begin "async.callback supports keepalive" && {
91
+ t0=$(date +%s)
92
+ curl -v --no-buffer -sSf http://$listen/[0-2] > $tmp 2>> $curl_err
93
+ t1=$(date +%s)
94
+ elapsed=$(( $t1 - $t0 ))
95
+ t_info "elapsed=$elapsed $model.$0 ($t_current)"
96
+ cmp $expect $tmp
97
+ test 2 -eq "$(fgrep 'Re-using existing connection!' $curl_err |wc -l)"
98
+ rm -f $curl_err
99
+ }
100
+
101
+ t_begin "async.callback supports keepalive with delay $DELAY" && {
102
+ t0=$(date +%s)
103
+ curl -v --no-buffer -sSf -H "X-Delay: $DELAY" \
104
+ http://$listen/[0-2] > $tmp 2>> $curl_err
105
+ t1=$(date +%s)
106
+ elapsed=$(( $t1 - $t0 ))
107
+ min=$(( $DELAY * 3 ))
108
+ t_info "elapsed=$elapsed $model.$0 ($t_current) min=$min"
109
+ test $elapsed -ge $min
110
+ cmp $expect $tmp
111
+ test 2 -eq "$(fgrep 'Re-using existing connection!' $curl_err |wc -l)"
112
+ rm -f $curl_err
113
+ }
114
+
115
+ t_begin "send async requests off in parallel" && {
116
+ t0=$(date +%s)
117
+ curl --no-buffer -sSf http://$listen/[0-2] > $a 2>> $curl_err &
118
+ curl --no-buffer -sSf http://$listen/[0-2] > $b 2>> $curl_err &
119
+ curl --no-buffer -sSf http://$listen/[0-2] > $c 2>> $curl_err &
120
+ }
121
+
122
+ t_begin "wait for curl terminations" && {
123
+ wait
124
+ t1=$(date +%s)
125
+ elapsed=$(( $t1 - $t0 ))
126
+ t_info "elapsed=$elapsed"
127
+ }
128
+
129
+ t_begin "termination signal sent" && {
130
+ kill $rainbows_pid
131
+ }
132
+
133
+ t_begin "no errors from curl" && {
134
+ test ! -s $curl_err
135
+ }
136
+
137
+ t_begin "no errors in stderr" && check_stderr
138
+
139
+ t_begin "responses match expected" && {
140
+ cmp $expect $a
141
+ cmp $expect $b
142
+ cmp $expect $c
143
+ }
144
+
145
+ t_done
146
+
@@ -7,6 +7,8 @@ EventMachine) ;;
7
7
  exit 0
8
8
  ;;
9
9
  esac
10
+ RUBYLIB=$($RUBY test_isolate_cramp.rb):$RUBYLIB
11
+ export RUBYLIB
10
12
  require_check cramp Cramp::VERSION
11
13
 
12
14
  t_plan 7 "streaming test for Cramp"
@@ -7,6 +7,8 @@ EventMachine) ;;
7
7
  exit 0
8
8
  ;;
9
9
  esac
10
+ RUBYLIB=$($RUBY test_isolate_cramp.rb):$RUBYLIB
11
+ export RUBYLIB
10
12
  require_check cramp Cramp::VERSION
11
13
 
12
14
  t_plan 4 "WebSocket monkey patch validity test for Cramp"
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
  . ./test-lib.sh
3
3
  case $model in
4
- *RevThread*|Thread*|*Fiber*|Revactor|NeverBlock) ;;
4
+ *CoolioThread*|*RevThread*|Thread*|*Fiber*|Revactor|NeverBlock) ;;
5
5
  *)
6
6
  t_info "skipping $T since it's not compatible with $model"
7
7
  exit 0
data/t/test_isolate.rb CHANGED
@@ -13,28 +13,23 @@ opts = {
13
13
  old_out = $stdout.dup
14
14
  $stdout.reopen($stderr)
15
15
 
16
+ lock = File.open(__FILE__, "rb")
17
+ lock.flock(File::LOCK_EX)
16
18
  Isolate.now!(opts) do
17
- gem 'rack', '1.1.0' # Cramp currently requires ~> 1.1.0
18
- gem 'kgio', '2.1.1'
19
- gem 'unicorn', '3.2.1'
20
- gem 'kcar', '0.1.1'
19
+ gem 'unicorn', '3.3.1'
20
+ gem 'kcar', '0.1.2'
21
21
 
22
22
  if engine == "ruby"
23
23
  gem 'sendfile', '1.0.0' # next Rubinius should support this
24
-
25
- gem 'iobuffer', '0.1.3'
26
24
  gem 'cool.io', '1.0.0'
27
25
 
28
26
  gem 'eventmachine', '0.12.10'
29
- gem 'sinatra', '1.0.0'
30
- gem 'async_sinatra', '0.2.1'
27
+ gem 'async_sinatra', '0.4.0'
31
28
 
32
29
  gem 'neverblock', '0.1.6.2'
33
- gem 'cramp', '0.11'
34
30
  end
35
31
 
36
32
  if defined?(::Fiber) && engine == "ruby"
37
- gem 'case', '0.5'
38
33
  gem 'revactor', '0.1.5'
39
34
  gem 'rack-fiber_pool', '0.9.0'
40
35
  end
@@ -0,0 +1,26 @@
1
+ require 'rubygems'
2
+ require 'isolate'
3
+ engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'ruby'
4
+
5
+ path = "tmp/isolate/#{engine}-#{RUBY_VERSION}/cramp"
6
+ opts = {
7
+ :system => false,
8
+ # we want "ruby-1.8.7" and not "ruby-1.8", so disable multiruby
9
+ :multiruby => false,
10
+ :path => path,
11
+ }
12
+
13
+ old_out = $stdout.dup
14
+ $stdout.reopen($stderr)
15
+
16
+ lock = File.open(__FILE__, "rb")
17
+ lock.flock(File::LOCK_EX)
18
+ Isolate.now!(opts) do
19
+ if engine == "ruby"
20
+ gem 'cramp', '0.11'
21
+ end
22
+ end
23
+
24
+ $stdout.reopen(old_out)
25
+ dirs = Dir["#{path}/gems/*-*/lib"]
26
+ puts dirs.map { |x| File.expand_path(x) }.join(':')
@@ -0,0 +1,11 @@
1
+ class WriteOnClose
2
+ def each(&block)
3
+ @callback = block
4
+ end
5
+
6
+ def close
7
+ @callback.call "7\r\nGoodbye\r\n0\r\n\r\n"
8
+ end
9
+ end
10
+ use Rack::ContentType, "text/plain"
11
+ run(lambda { |_| [ 200, [%w(Transfer-Encoding chunked)], WriteOnClose.new ] })
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: 11
4
+ hash: 7
5
5
  prerelease: false
6
6
  segments:
7
- - 2
8
- - 1
7
+ - 3
9
8
  - 0
10
- version: 2.1.0
9
+ - 0
10
+ version: 3.0.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Rainbows! hackers
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-29 00:00:00 +00:00
18
+ date: 2011-01-12 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -41,11 +41,11 @@ dependencies:
41
41
  requirements:
42
42
  - - ~>
43
43
  - !ruby/object:Gem::Version
44
- hash: 3
44
+ hash: 1
45
45
  segments:
46
46
  - 3
47
- - 2
48
- version: "3.2"
47
+ - 3
48
+ version: "3.3"
49
49
  type: :runtime
50
50
  version_requirements: *id002
51
51
  - !ruby/object:Gem::Dependency
@@ -72,12 +72,11 @@ dependencies:
72
72
  requirements:
73
73
  - - ~>
74
74
  - !ruby/object:Gem::Version
75
- hash: 21
75
+ hash: 13
76
76
  segments:
77
77
  - 1
78
- - 0
79
78
  - 1
80
- version: 1.0.1
79
+ version: "1.1"
81
80
  type: :development
82
81
  version_requirements: *id004
83
82
  description: |-
@@ -103,11 +102,10 @@ extra_rdoc_files:
103
102
  - lib/rainbows/coolio.rb
104
103
  - lib/rainbows/coolio/client.rb
105
104
  - lib/rainbows/coolio/core.rb
106
- - lib/rainbows/coolio/deferred_chunk_response.rb
107
- - lib/rainbows/coolio/deferred_response.rb
108
105
  - lib/rainbows/coolio/heartbeat.rb
109
106
  - lib/rainbows/coolio/master.rb
110
- - lib/rainbows/coolio/sendfile.rb
107
+ - lib/rainbows/coolio/response_chunk_pipe.rb
108
+ - lib/rainbows/coolio/response_pipe.rb
111
109
  - lib/rainbows/coolio/server.rb
112
110
  - lib/rainbows/coolio/thread_client.rb
113
111
  - lib/rainbows/coolio_fiber_spawn.rb
@@ -143,6 +141,7 @@ extra_rdoc_files:
143
141
  - lib/rainbows/fiber/queue.rb
144
142
  - lib/rainbows/fiber_pool.rb
145
143
  - lib/rainbows/fiber_spawn.rb
144
+ - lib/rainbows/http_parser.rb
146
145
  - lib/rainbows/http_response.rb
147
146
  - lib/rainbows/http_server.rb
148
147
  - lib/rainbows/max_body.rb
@@ -155,16 +154,15 @@ extra_rdoc_files:
155
154
  - lib/rainbows/queue_pool.rb
156
155
  - lib/rainbows/rack_input.rb
157
156
  - lib/rainbows/response.rb
158
- - lib/rainbows/response/body.rb
159
- - lib/rainbows/response/range.rb
160
157
  - lib/rainbows/rev.rb
161
158
  - lib/rainbows/rev_fiber_spawn.rb
162
159
  - lib/rainbows/rev_thread_pool.rb
163
160
  - lib/rainbows/rev_thread_spawn.rb
164
161
  - lib/rainbows/revactor.rb
165
- - lib/rainbows/revactor/body.rb
162
+ - lib/rainbows/revactor/client.rb
163
+ - lib/rainbows/revactor/client/methods.rb
164
+ - lib/rainbows/revactor/client/tee_socket.rb
166
165
  - lib/rainbows/revactor/proxy.rb
167
- - lib/rainbows/revactor/tee_socket.rb
168
166
  - lib/rainbows/sendfile.rb
169
167
  - lib/rainbows/server_token.rb
170
168
  - lib/rainbows/socket_proxy.rb
@@ -173,7 +171,6 @@ extra_rdoc_files:
173
171
  - lib/rainbows/thread_pool.rb
174
172
  - lib/rainbows/thread_spawn.rb
175
173
  - lib/rainbows/thread_timeout.rb
176
- - lib/rainbows/timed_read.rb
177
174
  - lib/rainbows/worker_yield.rb
178
175
  - lib/rainbows/writer_thread_pool.rb
179
176
  - lib/rainbows/writer_thread_pool/client.rb
@@ -196,6 +193,7 @@ files:
196
193
  - .manifest
197
194
  - .wrongdoc.yml
198
195
  - COPYING
196
+ - ChangeLog
199
197
  - DEPLOY
200
198
  - Documentation/.gitignore
201
199
  - Documentation/GNUmakefile
@@ -203,9 +201,12 @@ files:
203
201
  - Documentation/comparison.haml
204
202
  - Documentation/rainbows.1.txt
205
203
  - FAQ
204
+ - GIT-VERSION-FILE
206
205
  - GIT-VERSION-GEN
207
206
  - GNUmakefile
207
+ - LATEST
208
208
  - LICENSE
209
+ - NEWS
209
210
  - README
210
211
  - Rakefile
211
212
  - SIGNALS
@@ -225,11 +226,10 @@ files:
225
226
  - lib/rainbows/coolio.rb
226
227
  - lib/rainbows/coolio/client.rb
227
228
  - lib/rainbows/coolio/core.rb
228
- - lib/rainbows/coolio/deferred_chunk_response.rb
229
- - lib/rainbows/coolio/deferred_response.rb
230
229
  - lib/rainbows/coolio/heartbeat.rb
231
230
  - lib/rainbows/coolio/master.rb
232
- - lib/rainbows/coolio/sendfile.rb
231
+ - lib/rainbows/coolio/response_chunk_pipe.rb
232
+ - lib/rainbows/coolio/response_pipe.rb
233
233
  - lib/rainbows/coolio/server.rb
234
234
  - lib/rainbows/coolio/thread_client.rb
235
235
  - lib/rainbows/coolio_fiber_spawn.rb
@@ -265,6 +265,7 @@ files:
265
265
  - lib/rainbows/fiber/queue.rb
266
266
  - lib/rainbows/fiber_pool.rb
267
267
  - lib/rainbows/fiber_spawn.rb
268
+ - lib/rainbows/http_parser.rb
268
269
  - lib/rainbows/http_response.rb
269
270
  - lib/rainbows/http_server.rb
270
271
  - lib/rainbows/max_body.rb
@@ -277,16 +278,15 @@ files:
277
278
  - lib/rainbows/queue_pool.rb
278
279
  - lib/rainbows/rack_input.rb
279
280
  - lib/rainbows/response.rb
280
- - lib/rainbows/response/body.rb
281
- - lib/rainbows/response/range.rb
282
281
  - lib/rainbows/rev.rb
283
282
  - lib/rainbows/rev_fiber_spawn.rb
284
283
  - lib/rainbows/rev_thread_pool.rb
285
284
  - lib/rainbows/rev_thread_spawn.rb
286
285
  - lib/rainbows/revactor.rb
287
- - lib/rainbows/revactor/body.rb
286
+ - lib/rainbows/revactor/client.rb
287
+ - lib/rainbows/revactor/client/methods.rb
288
+ - lib/rainbows/revactor/client/tee_socket.rb
288
289
  - lib/rainbows/revactor/proxy.rb
289
- - lib/rainbows/revactor/tee_socket.rb
290
290
  - lib/rainbows/sendfile.rb
291
291
  - lib/rainbows/server_token.rb
292
292
  - lib/rainbows/socket_proxy.rb
@@ -295,13 +295,13 @@ files:
295
295
  - lib/rainbows/thread_pool.rb
296
296
  - lib/rainbows/thread_spawn.rb
297
297
  - lib/rainbows/thread_timeout.rb
298
- - lib/rainbows/timed_read.rb
299
298
  - lib/rainbows/worker_yield.rb
300
299
  - lib/rainbows/writer_thread_pool.rb
301
300
  - lib/rainbows/writer_thread_pool/client.rb
302
301
  - lib/rainbows/writer_thread_spawn.rb
303
302
  - lib/rainbows/writer_thread_spawn/client.rb
304
303
  - local.mk.sample
304
+ - man/man1/rainbows.1
305
305
  - rainbows.gemspec
306
306
  - setup.rb
307
307
  - t/.gitignore
@@ -310,6 +310,7 @@ files:
310
310
  - t/app_deferred.ru
311
311
  - t/async-response-no-autochunk.ru
312
312
  - t/async-response.ru
313
+ - t/async_chunk_app.ru
313
314
  - t/async_examples/README
314
315
  - t/async_examples/async_app.ru
315
316
  - t/async_examples/async_tailer.ru
@@ -318,6 +319,7 @@ files:
318
319
  - t/bin/sha1sum.rb
319
320
  - t/bin/unused_listen
320
321
  - t/bin/utee
322
+ - t/byte-range-common.sh
321
323
  - t/close-has-env.ru
322
324
  - t/close-pipe-response.ru
323
325
  - t/close-pipe-to_path-response.ru
@@ -386,6 +388,7 @@ files:
386
388
  - t/t0022-copy_stream-byte-range.sh
387
389
  - t/t0023-sendfile-byte-range.sh
388
390
  - t/t0024-pipelined-sendfile-response.sh
391
+ - t/t0025-write-on-close.sh
389
392
  - t/t0030-fast-pipe-response.sh
390
393
  - t/t0031-close-pipe-response.sh
391
394
  - t/t0032-close-pipe-to_path-response.sh
@@ -410,6 +413,7 @@ files:
410
413
  - t/t0300-async_sinatra.sh
411
414
  - t/t0400-em-async-app.sh
412
415
  - t/t0401-em-async-tailer.sh
416
+ - t/t0402-async-keepalive.sh
413
417
  - t/t0500-cramp-streaming.sh
414
418
  - t/t0501-cramp-rainsocket.sh
415
419
  - t/t0600-rack-fiber_pool.sh
@@ -426,12 +430,11 @@ files:
426
430
  - t/t9101.ru
427
431
  - t/test-lib.sh
428
432
  - t/test_isolate.rb
433
+ - t/test_isolate_cramp.rb
429
434
  - t/times.ru
430
435
  - t/worker-follows-master-to-death.ru
436
+ - t/write-on-close.ru
431
437
  - vs_Unicorn
432
- - ChangeLog
433
- - LATEST
434
- - NEWS
435
438
  has_rdoc: true
436
439
  homepage: http://rainbows.rubyforge.org/
437
440
  licenses: []